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

在某处分配并初始化数组!你是否?

self.shapeMarked = [NSMutableArray array];

例如,在您的 init 方法中应该这样做。没有它,你的 shapeMarked 就为零。

于 2012-04-26T20:20:45.197 回答
1

你的数组显然不是一个有效的NSMutableArray实例——或者换句话说,它只是nil.

那是你的代码的问题。

nil对象上调用选择器时,返回值始终是nil(对于对象)或0(对于标量类型)。调用objectAtIndex:将导致返回nil. 你期待一个NSNumber实例,如前所述,那将是nil. 现在您正在调用boolValuenil实例,它将返回0您期望的标量数据类型。请参阅 Apple 出色的Objective-C 文档

您很可能忘记shapeMarked使用有效NSMutableArray实例进行初始化。

于 2012-04-26T20:30:58.360 回答