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

Objective c NSDictionary可以包含不同类型的对象作为值吗?,objective-c,nsdictionary,Objective C,Nsdictionary,为什么以下情况会导致错误的访问错误 NSDictionary *header=[[NSDictionary alloc]initWithObjectsAndKeys:@"fred",@"title",1,@"count", nil]; 您可以在NSDictionary中使用不同类型的对象作为值,包括另一个NSDictionary吗?不是您使用的方式。数字1是一个基本体,NSArray对象只能容纳对象。为“1”创建一个NSNumber,然后它将存储它。一个NSDictionary只能包含Obje

为什么以下情况会导致错误的访问错误

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

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

不是您使用的方式。数字1是一个基本体,NSArray对象只能容纳对象。为“1”创建一个NSNumber,然后它将存储它。

一个
NSDictionary
只能包含Objective-C对象(例如
NSString
NSArray
),它不能包含
int
float
char*
等基本类型。考虑到这些限制,异构词典是完全合法的

如果要将诸如
1
之类的数字包含为键或值,则应使用
NSNumber
将其包装:

NSDictionary *header=[[NSDictionary alloc] initWithObjectsAndKeys:
    @"fred", @"title",
    [NSNumber numberWithInt:1], @"count",
    nil];
NSDictionary *header = { @"title": @"fred", @"count": @1 }; 
您可以将任何类型的对象放入
NSDictionary
。因此,虽然
@“fred”
可以,但
1
不行,因为整数不是对象。如果要在字典中输入数字,请将其包装在
NSNumber
中:

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

唯一的要求是它必须是一个对象。您可以在代码中正确处理对象,但可以根据关键点跟踪对象的类型

1不是一个对象。如果你想把一个数字放到字典里,你可能想把它转换成一个NSNumber。

有趣。我已经习惯了C#所有东西都是一个对象。谢谢