0

我将重新提出这个问题:

我使用Core Data并定义了一个带有 Attribute: attribute1 as Integer16的实体。

我读了属性:

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

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

在这最后一句话应用程序崩溃。

目的是实现算术:

int integer2 = 0;

integer2 = integer2 + integer1;

也许我必须使用 NSNumber、NSInteger、NSUInteger?

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

没有意见...

原始问题:

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

我已将属性countStep定义为Integer 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

任何想法?

4

1 回答 1

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]
于 2013-10-30T14:18:46.580 回答