2010-11-17 51 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属性。