如何将类型变量int32_t
(例如 ABPropertyID)存储在NSDictionary
?
[NSNumber numberWithInt:...]
似乎不起作用。
谢谢
从评论:
NSLog(@" %@ %@ ", [NSNumber numberWithLong:kABPersonFirstNameProperty], kABPersonFirstNameProperty);
打印:0(空)有什么想法吗?
+[NSNumber numberWithInteger:]
将在所有 32 位和 64 位系统上很好地保存一个 32 位数字。+[NSNumber integerValue]
将检索它。如果你需要它是无符号的,你可以使用`+[NSNumber numberWithUnsignedInteger:]`。
我在这里假设 Dave 的问题特定于 kAB... 常量——我可能会弄错,在这种情况下忽略以下内容:)
我相信这里的问题不在于您使用了不正确的语法;这是一个初始化顺序问题。我猜你是在初始化 kAB... 常量之前尝试这个操作——例如,通过调用ABAddressBookCreate()
. 这个问题有点令人困惑的是片段:
NSLog(@" %@ %@ ", [NSNumber numberWithLong:kABPersonFirstNameProperty], kABPersonFirstNameProperty);
应该是:
NSLog(@" %@ %d ", [NSNumber numberWithLong:kABPersonFirstNameProperty], kABPersonFirstNameProperty);
这是我的输出——在调用之前ABAddressBookCreate()
:
NSLog(@"Check: %d %d %d", kABPersonFirstNameProperty,kABPersonMiddleNameProperty,kABPersonLastNameProperty);
生产
检查:0 0 0
调用后,产生相同的日志语句
检查:0 6 1
正如其他人所说,NSNumber
将为此工作。但是,您至少应该模糊地意识到另外两个选项:(与底层CFDictionary
相同NSDictionary
,但它允许您存储任意指针或指针大小的整数)和NSMapTable
.
在这种情况下,使用 NSNumber 似乎是最好的主意。
对于更困难的情况,您始终可以使用 NSValue 或 NSData 将任何类型或指针放入可以存储在 Cocoa 集合中的 Objective-C 对象中。
int32_t myInt = 42;
NSValue *myValue = [NSValue value:&myInt withObjCType:@encode(int32_t)];