我有一个被描述为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;
答案 0 :(得分:1)
变化:
updateData.aHourFormat = [NSNumber numberWithInt:[preferencesDict objectForKey:@"timeFormat"]];
要:
updateData.aHourFormat = [preferencesDict objectForKey:@"timeFormat"];
objectForKey:
返回一个对象。如果您将其投放到NSInteger
,那么您将获得与其地址相关的值;如果你然后将其打包成NSNumber
那么这就是你以后解压缩为intValue
时会得到的。
您只需要直接使用该对象。
你会得到一个可靠的结果,因为有一个名为tagged pointers的东西,它与内存地址的使用方式有关,因此在64位平台上内存中没有任何东西。除了意识到可靠的结果并不令人惊讶之外,不值得担心。