无法在 CoreData 中将 'int' 设置为 NSNumber

Unable to set 'int' in CoreData as NSNumber

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

相同

这是代码:

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;

变化:

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

收件人:

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

objectForKey: returns 一个对象。如果你将它转换为 NSInteger 那么你会得到一个与其地址相关的值;如果您随后将其打包到 NSNumber 中,那么这就是您稍后解压为 intValue.

时将得到的结果

你直接想要对象就可以了。

否则你会得到一个可靠的结果,因为一个叫做 tagged pointers 的东西,它与内存地址的使用方式有关,因此在 64 位平台上内存中实际上没有任何东西。除了意识到可靠的结果不足为奇之外,无需担心。