Cocoa 将int32\t存储在NSDictionary中
如何在Cocoa 将int32\t存储在NSDictionary中,cocoa,numbers,boxing,Cocoa,Numbers,Boxing,如何在NSDictionary中存储int32\u t类型的变量(例如ABPropertyID) [NSNumber numberwhithint:…]似乎不起作用 谢谢 从评论中: NSLog(@" %@ %@ ", [NSNumber numberWithLong:kABPersonFirstNameProperty], kABPersonFirstNameProperty); 打印:0(空)有什么想法吗?+[NSNumber numberWithInteger:将在所有32位和64位系
NSDictionary
中存储int32\u t
类型的变量(例如ABPropertyID)
[NSNumber numberwhithint:…]
似乎不起作用
谢谢
从评论中:
NSLog(@" %@ %@ ", [NSNumber numberWithLong:kABPersonFirstNameProperty], kABPersonFirstNameProperty);
打印:0(空)有什么想法吗?
+[NSNumber numberWithInteger:
将在所有32位和64位系统上很好地保存32位数字<代码>+[NSNumber integerValue]将检索它。如果需要未签名,可以使用“`+[NSNumber numberWithUnsignedInteger:”。正如其他人所说,NSNumber
将适用于此。但是,您至少应该模糊地了解另外两个选项:CFDictionary
(与引擎盖下的NSDictionary
相同,但它允许您存储任意指针或指针大小的整数)和NSMapTable
在这种情况下,使用NSNumber似乎是最好的主意
对于较难的情况,可以始终使用NSValue或NSData将任何类型或指针放入可存储在Cocoa集合中的Objective-C对象中
int32_t myInt = 42;
NSValue *myValue = [NSValue value:&myInt withObjCType:@encode(int32_t)];
ABAddressBookCreate()
。有点让人困惑的是这个片段:
NSLog(@“%@%@,[NSNumber numberwhithlong:kabbersonfirstnameproperty],kabbersonfirstnameproperty]代码>
应该是:
NSLog(@“%@%d”,[NSNumber numberwhithlong:kabbersonfirstnameproperty],kabbersonfirstnameproperty]代码>
这是我的输出——在调用ABAddressBookCreate()
之前:
NSLog(@“检查:%d%d%d”、kABPersonFirstNameProperty、kABPersonMiddleNameProperty、kABPersonLastNameProperty)代码>
产生
支票:0
调用后,将生成相同的log语句
支票:061
NSNumber
怎么不适合你?使用.NSLog(@“%@%@,[NSNumber numberwhithlong:kabbersonfirstnameproperty],kabbersonfirstnameproperty]是完全正确的;打印:0(空)有什么想法吗?戴夫:这是正确的输出。在第二个格式化程序中,您传递了当前定义为零的kabbersonfirstnameproperty
(一个整数名),您告诉NSLog
您将给它一个对象指针。它将零打印为对象指针,即NULL
,在输出中显示为“(NULL)”。第一个格式化程序还接受一个对象,您给了它一个:一个值为零的NSNumber对象(KabbersonfirstNameProperty
)。输出中显示的是该对象的描述,即“0”。因此,代码工作正常,完全符合您的预期。您只是读错了。(实际上,不太好。如果您在第二位传递其他名称,您将崩溃,因为您仍在尝试将整数[kAB…Property
]打印为对象[%@
]。有关格式说明符的列表,请参阅,以便查看哪一个是正确的。)虽然您所说的是正确的,我认为在这种情况下,这是相当误导的,因为:A)问题中使用的numberwhithint:
方法也是如此(在所有32位和64位系统上都很好地保留32位数字),B)@Dave的问题显然在别处。numberwhite:
将为某些32位值生成负数,而'numberwhiteger:'将不会。我认为这是他的问题,因为在他把问题具体化之前我已经回答了。当我编译之前针对iOS 6的工作(即非零常量)代码时,我所有的常量开始返回零。修复方法是在使用任何ABAddressBookkABPerson*
之前调用ABAddressBookCreate()
“常量”。