2011-06-22 106 views
0

使用核心数据来保存各种信息,其中之一是'数字'属性(Int(16))。我尝试从数据库中取出: number = (int)[info valueForKey:@"number"];获取核心数据SQLite数据库的数量

不幸的是,这总是给一些可怕的结果,就像2895891275当它应该返回3.

希望得到任何帮助,谢谢!

+1

假设'info'是核心数据对象,你试过'number = [info.number intValue]'? – justin

+0

存储在Core Data中的所有值都包装在对象中。 – TechZen

回答

7

valueForKey返回一个对象,而不是一个int。你必须明确地施放它的事实应该是一个警告信号。尝试:

number = [[info valueForKey:@"number"] intValue]; 
1

要扩大@duskwuffs答案:

在核心数据中的所有值都是对象。当你将一个属性类型设置为Int16时,核心数据将创建一个NSNumber对象。

此代码:

number = (int)[info valueForKey:@"number"] 

...给你一个巨大的数字,因为[info valueForKey:@"number"]返回的NSNumber,一个对象,你转换为int的实例。当你将一个对象转换为一个int值时,你实际上将它的内存地址转换为一个int值,并最终得到一个大的无意义数字。