我将重新定义这个问题:
我使用核心数据,并将一个具有属性的实体定义为 Integer16:attribute1。
我阅读了属性:
NSArray *objects = [objectContext executeFetchRequest:request error:&error];
int integer1 = [[objects valueForKey:@"attribute1"] integerValue]
在最后一句话中,应用程序崩溃。
目的是实现算术:
int integer2 = 0;
integer2 = integer2 + integer1;
也许我必须与NSNumber,NSInteger,NSUInteger合作?
真的,我不明白目标 C 怎么这么简单的事情如此复杂。
不加评论。。。
原始问题:
首先,我使用XCode 5(iOS 7)
我定义了一个实体,其属性计数步长为整数 16。在该属性中,我保存了一个值(即 10)
稍后,我想读取该值:
int integerVal1 = [[objects valueForKey:@"countStep"] integerValue];
为了实现算术运算:
int integerVal2;
integerVal2 = integerVal2 + integerVal1
但在源代码行中:
int integerVal1 = [[objects valueForKey:@"countStep"] integerValue];
应用崩溃并显示错误消息:
* 由于未捕获的异常"NSInvalidArgumentException"而终止应用程序,原因:"-[__NSArrayI整数值]:发送到实例的无法识别的选择器
我已经尝试了几种选择。
@property (nonatomic, assign) int integerVal2;
或:
NSString *string = [[objects valueForKey:@"countStep"]description];
int integerVal1 = [NSNumber numberWithInteger:[string intValue]];
integerVal2 = integerVal2 + integerVal1
问题是一样的:将字典对象转换为基元元素 int(整数)以计算算术运算:整数Val2 = 整数Val2 + integerVal1
知道吗?
好的,仔细阅读你的代码...这:
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]