Как бороться с логическими значениями в NSMutableArrays? - PullRequest
4 голосов
/ 09 августа 2010

Может кто-нибудь сказать мне, почему мое приложение падает здесь?

и почему не происходит сбой при замене объектов YES значениями NSString?

все, что я хочу сделать, это сохранить логические данные в массиве и изменить эти данные позже, Может кто-нибудь сказать, пожалуйста, как это сделать?

- (void)viewDidLoad {
    [super viewDidLoad];
    NSMutableArray* arr = [[NSMutableArray alloc] initWithObjects:YES, YES, YES, YES, nil];
    NSLog([arr objectAtIndex:1]);
}

1 Ответ

14 голосов
/ 09 августа 2010

YES и NO - это BOOL, то есть не класс Objective-C. Контейнеры Foundation могут хранить только объекты Objective-C.

Вы должны обернуть их в NSNumber, например:

NSNumber* yesObj = [NSNumber numberWithBool:YES];
NSMutableArray* arr = [[NSMutableArray alloc] initWithObjects:
                                               yesObj, yesObj, yesObj, yesObj, nil];
NSLog(@"%d", [[arr objectAtIndex:1] boolValue]);

Причина, по которой он принимает NSString, заключается в том, что NSString является своего рода классом Objective-C.

...