アプリ版:「スタンプのみでお礼する」機能のリリースについて

objective-cを勉強中なのですが、分からない所があります。

(1)作成したリストを、ボタンを押すたびに一つずつランダムに選んでラベルに表示させる
(2)同時に、選んだものはリストから削除していく
(3)全て(下記の場合は5つ)選び終わったら、リストを完全に復活させる

というメソッドを作りたいのですが、(3)の段階を上手く記述できません。
具体的には、if文の条件を上手く設定できません。
どなたかアドバイスを頂けないでしょうか。
以上、何卒宜しくお願い致します。


- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

_lists = [NSMutableArray arrayWithObjects:@"apple",@"bear",@"hand",@"foot",@"sun", nil];


}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.


}


- (IBAction)btRandom:(id)sender {

if (_lists > 0) {

self.lbLabel.text = nil;

// listからインデックス番号をランダムに選択
unsigned int erabu = arc4random_uniform(_lists.count);

NSLog(@"1:%d", erabu);


// listからランダムに選択したものを抜き出して文字データにする
NSString *nukidasi = [_lists objectAtIndex:erabu];
NSLog(@"2:%@", nukidasi);

// ラベルに出力する
self.lbLabel.text = nukidasi;

// listからランダムに選択して抜き出したもの(erabu)をlistから削除
[_lists removeObjectAtIndex:erabu];
NSLog(@"%@", _lists);

}else if (_lists < 0){
_lists = [NSMutableArrayarrayWithObjects:@"apple",@"bear",@"hand",@"foot",@"sun", nil];
}

}

A 回答 (1件)

下から5行目:



}else if (_lists < 0){

変数_listsは、(NSMutableArray *)型のクラスインスタンスを代入しています。(ふつうは、クラスインスタンスなどとごていねいな表現はせず、ただインスタンスとだけ呼びます)
見てのとおりインスタンスはC言語のポインタの形をしているので、その実体は符号なしの整数型です。なので、「_lists < 0」という整数0との比較演算が成り立ちます。おそらくコンパイラの警告も出ていないのではないでしょうか?
くり返しますが、ポインタは「符号なしの整数型」なので、負数すなわち0より小さくなることはありません。「_lists < 0」が真になることはぜったいにありません。よって、以降のコードが実行されることもありません。

_list.count < 1

あなたの気持ちは、こう書きたかったのではありませんか?
プロパティcountがなにかは、クラスリファレンスでお調べを。

蛇足:

23行目:

self.lbLabel.text = nil;

できないことはないけど、ふつうはこういうことはしません。

self.iblabel.text = @"";

空行を入れておきます。
そもそもこういう「初期化」自体、不用なんですけどね。
    • good
    • 0
この回答へのお礼

上手くいきました!
ありがとうございました!

お礼日時:2014/11/05 18:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!