我将重新构思这个问题:
我使用核心数据,我将具有属性的实体: 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
有什么想法吗?
答案 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]