4

如何将类型变量int32_t(例如 ABPropertyID)存储在NSDictionary?

[NSNumber numberWithInt:...]似乎不起作用。

谢谢


从评论:

NSLog(@" %@ %@ ", [NSNumber numberWithLong:kABPersonFirstNameProperty], kABPersonFirstNameProperty);

打印:0(空)有什么想法吗?

4

4 回答 4

2

+[NSNumber numberWithInteger:]将在所有 32 位和 64 位系统上很好地保存一个 32 位数字。+[NSNumber integerValue]将检索它。如果你需要它是无符号的,你可以使用`+[NSNumber numberWithUnsignedInteger:]`。

于 2010-01-26T22:06:21.790 回答
2

我在这里假设 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

于 2010-12-02T01:20:37.320 回答
1

正如其他人所说,NSNumber将为此工作。但是,您至少应该模糊地意识到另外两个选项:(与底层CFDictionary相同NSDictionary,但它允许您存储任意指针或指针大小的整数)和NSMapTable.

于 2010-01-27T10:37:33.670 回答
1

在这种情况下,使用 NSNumber 似乎是最好的主意。

对于更困难的情况,您始终可以使用 NSValue 或 NSData 将任何类型或指针放入可以存储在 Cocoa 集合中的 Objective-C 对象中。

int32_t myInt = 42;
NSValue *myValue = [NSValue value:&myInt withObjCType:@encode(int32_t)];
于 2010-01-27T16:41:41.110 回答