无法将CoreData中的“int”设置为NSNumber

时间:2015-11-02 21:13:10

标签: objective-c core-data nsnumber

我有一个被描述为Int16的属性。它在.h文件中描述为NSNumber。无论我如何格式化,我似乎无法获得存储在UserDefaults中的12或24的有效值。我究竟做错了什么?或者,更好的是,如何解决此问题,以便 aHourFormat timeFormat 相同?

这是代码:

updateData.aHourFormat = [NSNumber numberWithInt:[preferencesDict objectForKey:@"timeFormat"]];
NSLog(@"\ntimeFormat: %d\naHourFormat: %d",[[preferencesDict objectForKey:@"timeFormat"]intValue],[updateData.aHourFormat intValue]);

这是NSLog在调试控制台中显示的内容:

timeFormat: 12
aHourFormat: -30496

timeFormat: 24
aHourFormat: 14000

这是 aHourFormat 的定义:

@property (nonatomic, retain) NSNumber *aHourFormat;

1 个答案:

答案 0 :(得分:1)

变化:

updateData.aHourFormat = [NSNumber numberWithInt:[preferencesDict objectForKey:@"timeFormat"]];

要:

updateData.aHourFormat = [preferencesDict objectForKey:@"timeFormat"];

objectForKey:返回一个对象。如果您将其投放到NSInteger,那么您将获得与其地址相关的值;如果你然后将其打包成NSNumber那么这就是你以后解压缩为intValue时会得到的。

您只需要直接使用该对象。

你会得到一个可靠的结果,因为有一个名为tagged pointers的东西,它与内存地址的使用方式有关,因此在64位平台上内存中没有任何东西。除了意识到可靠的结果并不令人惊讶之外,不值得担心。