使用核心数据来保存各种信息,其中之一是'数字'属性(Int(16))。我尝试从数据库中取出: number = (int)[info valueForKey:@"number"]
;获取核心数据SQLite数据库的数量
不幸的是,这总是给一些可怕的结果,就像2895891275当它应该返回3.
希望得到任何帮助,谢谢!
使用核心数据来保存各种信息,其中之一是'数字'属性(Int(16))。我尝试从数据库中取出: number = (int)[info valueForKey:@"number"]
;获取核心数据SQLite数据库的数量
不幸的是,这总是给一些可怕的结果,就像2895891275当它应该返回3.
希望得到任何帮助,谢谢!
valueForKey
返回一个对象,而不是一个int。你必须明确地施放它的事实应该是一个警告信号。尝试:
number = [[info valueForKey:@"number"] intValue];
要扩大@duskwuffs答案:
在核心数据中的所有值都是对象。当你将一个属性类型设置为Int16时,核心数据将创建一个NSNumber对象。
此代码:
number = (int)[info valueForKey:@"number"]
...给你一个巨大的数字,因为[info valueForKey:@"number"]
返回的NSNumber,一个对象,你转换为int的实例。当你将一个对象转换为一个int值时,你实际上将它的内存地址转换为一个int值,并最终得到一个大的无意义数字。
假设'info'是核心数据对象,你试过'number = [info.number intValue]'? – justin
存储在Core Data中的所有值都包装在对象中。 – TechZen