NSDictionary可以包含不同类型的对象作为值吗?

时间:2012-01-24 17:46:57

标签: objective-c nsdictionary

为什么以下导致BAD_ACCESS错误?

NSDictionary *header=[[NSDictionary alloc]initWithObjectsAndKeys:@"fred",@"title",1,@"count", nil];

你可以在NSDictionary中使用不同类型的对象作为值,包括另一个NSDictionary吗?

4 个答案:

答案 0 :(得分:15)

您可以将任何类型的对象放入NSDictionary。因此,虽然@"fred"没有问题,但1不是,因为整数不是对象。如果要将数字放在字典中,请将其包装在NSNumber

NSDictionary *header = { @"title": @"fred", @"count": @1 }; 

答案 1 :(得分:0)

不是你的方式。数字1是基元,NSArray对象只能包含对象。为“1”创建一个NSNumber,然后它将存储它。

答案 2 :(得分:0)

NSDictionary只能在其中包含Objective-C对象(例如NSStringNSArray),它不能包含基本类型,如int,{{1} },或float。鉴于这些限制,异构词典是完全合法的。

如果您想要包含char*之类的数字作为键或值,则应使用1包装它:

NSNumber

答案 3 :(得分:0)

唯一的要求是成为一个对象。您可以在代码中正确处理对象,但据推测,您可以根据键跟踪其类型。

1不是对象。如果你想在字典中输入一个数字,你可能想把它转换为NSNumber。