Разница в данных при использовании основных отношений данных - PullRequest
0 голосов
/ 18 ноября 2010

Я использую данные ядра для извлечения значений из базы данных 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"]);

У сложностей и сложностей значений сущностей есть отношение один ко многим.

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

1 Ответ

0 голосов
/ 18 ноября 2010

Это, кажется, фундаментальное недоразумение. 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...