0

質問を再構成します:

Core Dataを使用し、Attribute: attribute1Integer16としてエンティティを定義します。

私は属性を読みました:

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) で作業します

属性countStepInteger 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 に答える