如何将C ++变量存储为NSDictionary中的值?

时间:2014-10-06 21:34:49

标签: c++ ios objective-c

我正在使用Objective-C ++进行编码,并希望将ObjC结构转换为C ++。 ObjC侧变量位于const NSString*, C ++ - 侧变量在枚举中。

我的项目使用ARC。

我这样做:

NSDictionary* myDict = [NSDictionary dictionaryWithObjectsAndKeys: My::NameSpace::enumVar, MyObjCVar, nil]

这给了我一个编译器错误:

Implicit conversion of 'int' to 'id' is disallowed with ARC.

是否存在将任何C ++类型存储到NSDictionary中的通用方法?

3 个答案:

答案 0 :(得分:2)

您无法在NSObject内直接存储除id指针(NSDictionary类型)以外的任何内容,无论是键还是值。您需要将对象/指针/值包装在客观c对象(例如NSValueNSNumber)中,或使用NSMapTable

答案 1 :(得分:1)

由于字典的键必须是对象,并且您当前使用的值是int,因此您应该能够将其转换为NSNumber对象:

[NSNumber numberWithInt:enumVal];

答案 2 :(得分:1)

你可以这样做:

NSDictionary* myDict = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:My::NameSpace::enumVar], MyObjCVar, nil];

但为什么不使用更现代的语法?

NSDictionary* myDict = @{MyObjCVar : @(My::NameSpace::enumVar)};

我非常喜欢第二种选择。