NSDictionary和EXC_BAD_ACCESS

时间:2011-06-15 21:08:18

标签: objective-c ios nsdictionary exc-bad-access

试图在这里找到答案并最终在另一个网站上找到了线索。如果有人在这里搜索并且遇到同样的问题,请在此处发布。

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

这会产生:

Program received signal: "EXC_BAD_ACCESS"

这是什么原因?

3 个答案:

答案 0 :(得分:4)

YES42不是对象指针。您正在尝试创建一个NSArray,它只能包含对象,并且您传入的值不是指向对象的指针。你会因为

的原因而崩溃
[YES description];

将崩溃 - YES不是有效的对象指针。

答案 1 :(得分:1)

首先,在你的数组中,YES和42不是对象。尝试在那里使用[NSNumber numberWithInt:42]。你应该在那里有一个编译器警告。

答案 2 :(得分:0)

int或BOOL是对象,因此不能成为NSDictionary的一部分。而不是使用int和bools使用他们的对象相当于NSNumber。您可以使用以下方法轻松存储int:

[NSNumber numberWithInt:(int)]

您可以使用以下内容存储BOOL:

[NSNumber numberWithBool:(BOOL)]