使用Core-Data来保存各种信息,其中一个是'number'属性(Int(16))。我尝试使用以下方法将其从数据库中取出:
number = (int)[info valueForKey:@"number"]
;
不幸的是,这总会产生一些糟糕的结果,比如2895891275应该返回3。
感谢任何帮助,谢谢!
答案 0 :(得分:7)
valueForKey
返回一个对象,而不是int。您必须明确地投射它的事实应该是一个警告标志。尝试:
number = [[info valueForKey:@"number"] intValue];
答案 1 :(得分:1)
扩展@duskwuffs回答:
核心数据中的所有值都是对象。当您将属性类型设置为Int16时,Core Data将创建一个NSNumber对象。
此代码:
number = (int)[info valueForKey:@"number"]
...给你一个巨大的数字,因为[info valueForKey:@"number"]
返回一个NSNumber实例,一个对象,你转换为int。当你将一个对象转换为一个int时,你实际上将它在内存中的地址转换为一个int,因此最终得到一个大的无意义的数字。