2

プログラムで関係(1対多)にアクセスしようとしています。私のデータモデルには、WordCategory(1対多)と呼ばれるエンティティとの関係を持つ言語(2つの文字列属性を持つ)と呼ばれるNSManagedEntityが含まれています。NSFetchRequestを使用して、すべての言語エンティティを取得します。それはうまくいきます。関係のvalueForKeyを取得し、それは正常に機能します。そのオブジェクトを操作できます。ただし、WordCategoryオブジェクトを格納するNSSetにメッセージカウントを送信しようとすると、

言い換えれば、この行は機能します:

       NSLog(@"word category count %@",[[wordCategory anyObject] valueForKey:@"name"]);

これはしません:

NSLog(@"word category count %@",[wordCategory count]

デバッガーにEXC_BAD_ACCESSというメッセージが表示されます。

残りのコードは次のとおりです。

NSManagedObjectContext *moc = [myAppDelegate managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Language" inManagedObjectContext:moc]];

NSError *error = nil;
NSArray *results = [moc executeFetchRequest:request error: &error];
if (error) {
    [NSApp presentError:error];
    return;
}

NSManagedObject *obj = [results objectAtIndex:0];
NSSet *wordCategory = [obj valueForKey:@"category"];
NSLog(@"word category count %@",[wordCategory count]);

この謎に誰もが当てることができるよりもどんな光にも感謝します。ご協力いただきありがとうございます!

4

1 に答える 1

5
  • (NSUInteger)カウント

NSSetのメソッドカウントの戻りタイプはNSUIntegerです。したがって、%@を使用してこのタイプを参照しようとすると、デバッガーでEXC_BAD_ACCESSというメッセージが表示されます。予期しないタイプの値にアクセスしています。

代わりに%dを使用してみてください。

NSLog(@ "word category count%d"、[wordCategory count]);

bobDevilのコメントの後に編集(正確な回答-コメントの詳細):

NSLog(@ "word category count%lu"、[wordCategory count]);

ではごきげんよう。

于 2010-03-26T20:23:09.307 に答える