如何从Core Data中读取和使用Integer值

时间:2013-10-29 22:30:49

标签: core-data xcode5

我将重新构思这个问题:

我使用核心数据,我将具有属性的实体: attribute1 定义为 Integer16

我读了属性:

NSArray *objects = [objectContext executeFetchRequest:request error:&error];

int integer1 = [[objects valueForKey:@"attribute1"] integerValue]

在最后一句App中崩溃。

目的是实现算术:

int integer2 = 0;

integer2 = integer2 + integer1;

也许我必须与NSNumber,NSInteger,NSUInteger合作?

真的,我不明白Objective C这么简单的事情是多么复杂。

没有评论......

原始问题:

首先,我使用XCode 5(iOS 7)

我已将具有属性 countStep 的实体定义为整数16 。在该属性中,我保存了一个值(即10)

后来,我想读一下这个值:

int integerVal1 = [[objects valueForKey:@"countStep"] integerValue];

意图实现算术运算:

int integerVal2;

integerVal2 = integerVal2 + integerVal1

但是在源代码行中:

int integerVal1 = [[objects valueForKey:@"countStep"] integerValue];

应用程序崩溃并显示错误消息:

* 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [__ NSArrayI integerValue]:发送到实例的无法识别的选择器

我尝试了几种替代方案。

@property (nonatomic, assign) int integerVal2;

或者:

NSString *string = [[objects valueForKey:@"countStep"]description];

int integerVal1 = [NSNumber numberWithInteger:[string intValue]];

integerVal2 = integerVal2 + integerVal1

问题是一样的:将字典对象转换为原始元素int(整数)来计算算术运算:integerVal2 = integerVal2 + integerVal1

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

好的,仔细阅读你的代码......这个:

NSArray *objects = [objectContext executeFetchRequest:request error:&error];

int integer1 = [[objects valueForKey:@"attribute1"] integerValue]

永远不会工作,因为在数组上调用valueForKey:会返回一个数组。因此,当您致电integerValue时,您会收到例外情况。

你应该做的是:

NSArray *objects = [objectContext executeFetchRequest:request error:&error];
id myEntity = objects[0]; // put protection around this...
int integer1 = [[myEntity valueForKey:@"attribute1"] integerValue]