2010-11-17 46 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"]); 

我以純文本的形式得到結果。例如「一些價值」。

當登錄的「值」數組中的結果,但是我得到這樣的結果:

{(
    "some value" 
)} 

我使用的是相同的日誌記錄來電:

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

的實體難度和difficultyValues有一對多的關係。

如何顯示數組「values」中的值,如「systems」中的值?我稍後需要一個標籤。

回答

0

這似乎是一個根本性的誤解。 difficultyValues的關係,而名稱是NSString屬性。這就是爲什麼它看起來不同NSLog(),它通過發送對象-description消息。

difficultyValues的值將爲NSSet,其中包含實體difficulty的多個管理對象。

這裏是你應該做的:

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屬性。