NSDictionary и EXC_BAD_ACCESS - PullRequest
       20

NSDictionary и EXC_BAD_ACCESS

4 голосов
/ 16 июня 2011

Пытался найти ответ здесь и в итоге нашел подсказку на другом сайте.Публикация здесь, если кто-то ищет здесь и имеет такую ​​же проблему.

NSDictionary *d = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"foo", YES, 42, nil] 
forKeys:[NSArray arrayWithObjects:@"bar", @"baz", @"count", nil]];

Это приводит к:

Program received signal: "EXC_BAD_ACCESS"

В чем причина этого?

Ответы [ 3 ]

4 голосов
/ 16 июня 2011

YES и 42 не являются указателями на объекты.Вы пытаетесь создать NSArray, который может содержать только объекты, и вы передаете значения, которые не являются указателями на объекты.Вы потерпите крах по той же причине, по которой

[YES description];

потерпит крах - YES не является действительным указателем объекта.

1 голос
/ 16 июня 2011

С одной стороны, в вашем массиве YES и 42 не являются объектами. Попробуйте использовать [NSNumber numberWithInt: 42] там. Там должно быть предупреждение от компилятора.

0 голосов
/ 13 июня 2012

Int, ни BOOL являются объектами и, следовательно, не могут быть частью NSDictionary. Вместо использования int и bools используйте их объектный эквивалент NSNumber. Вы можете легко хранить int используя:

[NSNumber numberWithInt:(int)]

Вы можете хранить BOOL с:

[NSNumber numberWithBool:(BOOL)]
...