为什么以下导致BAD_ACCESS错误?
NSDictionary *header=[[NSDictionary alloc]initWithObjectsAndKeys:@"fred",@"title",1,@"count", nil];
你可以在NSDictionary中使用不同类型的对象作为值,包括另一个NSDictionary吗?
答案 0 :(得分:15)
您可以将任何类型的对象放入NSDictionary
。因此,虽然@"fred"
没有问题,但1
不是,因为整数不是对象。如果要将数字放在字典中,请将其包装在NSNumber
:
NSDictionary *header = { @"title": @"fred", @"count": @1 };
答案 1 :(得分:0)
不是你的方式。数字1是基元,NSArray对象只能包含对象。为“1”创建一个NSNumber,然后它将存储它。
答案 2 :(得分:0)
NSDictionary
只能在其中包含Objective-C对象(例如NSString
和NSArray
),它不能包含基本类型,如int
,{{1} },或float
。鉴于这些限制,异构词典是完全合法的。
如果您想要包含char*
之类的数字作为键或值,则应使用1
包装它:
NSNumber
答案 3 :(得分:0)
唯一的要求是成为一个对象。您可以在代码中正确处理对象,但据推测,您可以根据键跟踪其类型。
1不是对象。如果你想在字典中输入一个数字,你可能想把它转换为NSNumber。