2010-11-17 4 views
0

Я использую основные данные для извлечения значений из базы данных sql lite для моего приложения iphone. Я довольно новичок в синтаксисе, поэтому мне может не хватать нескольких ключевых сведений.Разница в данных при использовании отношений данных ядра

Моя выборка запрос выглядит следующим образом:

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 ​​имеют от одного до многих отношений.

Как отобразить значение в массиве «значения», как в «системах»? Мне нужно это позже для лейбла.

ответ

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.

Смежные вопросы