0

継続的に実行される関数内に NSMutableArray を作成し、その値を一度だけ初期化して、関数が繰り返し呼び出されるときに値を初期化し続けないように (変更された値を置き換えないように) しようとしています。私の問題は、if ステートメントで値を初期化しようとすると、配列の値が変更されないことです。「値は 1」を出力すると予想しているときに、「値は 0」を出力し続けます。

関連するコードは次のとおりです。

 @property (nonatomic, strong) NSMutableArray * shapeMarked;
 @synthesize shapeMarked;

 //locationManager is the function that's continuously called

 -(void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
 {

 //event count is an integer that continuously increases by one each time the 
 //parent function is called, this if statement is used so that it only happens 
 //once

 if(eventcount == 1){

    for (int i = 0; i < 5; i++){

        BOOL b = YES;

        [shapeMarked addObject:[NSNumber numberWithBool:b]];

        NSLog(@"value is %d", [[shapeMarked objectAtIndex:i] boolValue] );

    }

  }
 }
4

2 に答える 2

1

あなたの配列は明らかに有効なNSMutableArrayインスタンスではありません-言い換えれば、それはただnilです。

それがあなたのコードの問題です。

オブジェクトでセレクターを呼び出す場合nil、戻り値は常にnil(オブジェクトの場合)または0(スカラー型の場合)です。呼び出すobjectAtIndex:と、が返されnilます。あなたはインスタンスを期待していNSNumberます、そして前に言ったように、それはそうなるでしょうnilboolValueこれで、そのnilインスタンスを呼び出し0て、スカラーデータ型を期待しているとおりに戻ります。Appleの優れたObjective-Cドキュメントを参照してください。

shapeMarked有効なNSMutableArrayインスタンスで初期化するのを忘れている可能性があります。

于 2012-04-26T20:30:58.360 に答える
1

配列をどこかに割り当てて初期化してください!あなたは?

self.shapeMarked = [NSMutableArray array];

たとえば、initメソッドで行う必要があります。それがなければ、あなたの shapeMarked はゼロです。

于 2012-04-26T20:20:45.197 に答える