2010-11-17 1 views
0

私はiPhoneデータ用のsql liteデータベースからコアデータをフェッチしています。私は構文が新しく、いくつかの重要な情報が不足している可能性があります。コアデータリレーションシップを使用する場合のデータの相違

フェッチ私の要求は次のようになります。その後

NSEntityDescription *difficultyDescription = [NSEntityDescription entityForName:@"Difficulty" inManagedObjectContext:managedObjectContext]; 
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease]; 
[fetchRequest setEntity:difficultyDescription]; 
NSArray *diffResults = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; 

、私はこのスニペットを使用して結果をループしています:

systems = [[NSMutableArray alloc] init]; 
values = [[NSMutableArray alloc] init]; 
for (NSManagedObject *diff in diffResults) { 
[systems addObject:diff]; 

[values addObject:[diff valueForKey:@"difficultyValues"]]; 
} 

私はこれは約得ることはありませんどのような、私は

NSLog(@"%@", [[systems objectAtIndex:0] valueForKey:@"name"]); 

を使用してシステムをログインしたときに、私はプレーンテキストで結果を得ること。例えば、「ある価値」。

「値」列に結果をログに記録するときしかし、私はこの結果を得る:エンティティの難しさとdifficultyValuesが持っている

NSLog(@"%@", [[values objectAtIndex:0] valueForKey:@"value"]); 

{(
    "some value" 
)} 

は、私は同じロギングコールを使用しています1対多数の関係。

「システム」のような配列「値」の値を表示するにはどうすればよいですか?私はラベルのために後でそれを必要とします。

答えて

0

これは基本的な誤解のようです。 difficultyValuesの関係ですが、名前はNSStringの属性です。そのため、NSLog()ではオブジェクトが-descriptionメッセージを送信することによって動作が異なります。

difficultyValuesの値は、エンティティdifficultyの複数の管理対象オブジェクトを含むNSSetになります。ここで

はあなたが何をすべきかです:

NSLog(@"%@", [[systems objectAtIndex:0] valueForKey:@"name"]); // NSString* 

// let's loop through all the difficulties of this item 
for (NSManagedObject* aDifficulty in [[[systems objectAtIndex:0] valueForKey:@"difficultyValues"] allObjects]) { 

    NSLog(@"%@", [aDifficulty valueForKey:@"name"]); 

} 

これ、もちろん、あなたのdifficultyエンティティがname属性を持っていると仮定。

関連する問題