2013-07-09 5 views
2

Как вы можете проверить, было ли установлено отношение при добавлении данных в основные данные? В настоящее время у меня есть ДЛЯ МНОГО отношений между двумя моими сущностями.Как проверить, было ли установлено отношение - Основные данные

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

enter image description here

Я добавление данных с сущностями ядра данных, используя следующий код. Правильно ли это выглядит при установлении отношений между ними?

ExcerciseInfo *info = [_fetchedResultsController objectAtIndexPath:indexPath]; 
NSManagedObject *routineEntity = [NSEntityDescription insertNewObjectForEntityForName:@"Routines"inManagedObjectContext:context]; 
NSManagedObject *routineEntityDetail = [NSEntityDescription insertNewObjectForEntityForName:@"RoutinesDetails" inManagedObjectContext:context]; 

[[routineEntityDetail valueForKey:@"name"] addObject:routineEntity]; 

    [routineEntity setValue: info.name forKey:@"routinename"]; 
    [routineEntityDetail setValue: info.details.muscle forKey:@"image"]; 

    NSError *error = nil; 

ОШИБКА РАССЛЕДОВАНИЕ

Я использовал один из предложенных методов, но я все еще получаю эту ошибку, когда я тестировал отношения в NSLog(@"ExTitle *** %@",Ex.routinedet); с routinedet быть @property (nonatomic, retain) NSSet *routinedet; в основных данных создается модель отношений NSObject:

Relationship 'routinedet' fault on managed object (0x749ea50) <Routines: 0x749ea50> (entity: Routines; id: 0x749c630 <x-coredata://C075DDEC-169D-46EC-A4B7-972A04FCED70/Routines/p1> ; data: { 
    routinedet = "<relationship fault: 0x8184a20 'routinedet'>"; 
    routinename = "Leg Crunch"; 

Я также проверил, чтобы segue работал, и это как;

self.title = Ex.routinename; 
RoutinesDetails *info; 
NSLog(@"Image *** %@",info.image); 

который показывает название как правильное имя, но возвращает строку изображения как null.

ответ

2

Предполагая, что объекты определяются как в Core Data Detail View with relationship, следующий код устанавливает связь между два объекта:

[routineEntityDetail setValue:routineEntity forKey:@"routineinfo"]; 

Он устанавливает указатель отношения с routineEntityDetail к routineEntity.

Поскольку routinedet является обратной связью к routineinfo, routineEntityDetail автоматически добавляются к routinedet отношениям routineEntity.

Это не имеет смысла:

[[routineEntityDetail valueForKey:@"name"] addObject:routineEntity]; 

И это выглядит нормально:

[routineEntity setValue: info.name forKey:@"routinename"]; 
[routineEntityDetail setValue: info.details.muscle forKey:@"image"]; 
+0

Еще раз спасибо мартин. Так что в настоящее время это не сработает? Является '[[programEntityDetail valueForKey: @" name "] addObject: routEntity];' не нужно? – Sgillon

+0

@ user2221799: 'name' является атрибутом' RoutineDetails', а не отношениями. –

+0

поэтому на этой основе я бы просто изменил его на 'rountineinfo', чтобы он соответствовал отношениям. Спасибо – Sgillon

1

Не видя ваше DataModel я не могу быть уверен, но я верю, что вы хотели бы что-то вроде этого:

ExcerciseInfo *info = [_fetchedResultsController objectAtIndexPath:indexPath]; 
Routine *routine = [NSEntityDescription insertNewObjectForEntityForName:@"Routine"inManagedObjectContext:context]; 
RoutineDetail *routineDetail = [NSEntityDescription insertNewObjectForEntityForName:@"RoutineDetail" inManagedObjectContext:context]; 

routine.routineName = info.name; 
routineDetail.image = info.details.muscle; 

[routine addRoutineDetailsObject:routineDetail]; 

Это предполагает, что в рутине есть много обычныхDetails и что связь называется так, как она будет путем создания подкласса NSManagedObject в XCode. Я также удалил множественное имя в именах классов, поскольку классы моделей обычно являются единственными.

Если мои предположения отсутствуют, прошу прощения.

DataModel я кодирующая здесь: enter image description here

+1

модель данных можно увидеть в начале этого сообщения [ссылка] http://stackoverflow.com/questions/17553654/core-data-detail-view-with-relationship. Это то, чего вы ожидали? – Sgillon

+0

Твой не соответствует соглашениям об именах, к которым я привык, но это не ошибка. Я считаю, что большая проблема заключается в создании подклассов NSManagedObject. В XCode вы найдете этот инструмент в меню редактирования, когда смотрите на свою дату. – KHansenSF

+0

nsmanaged объекты генерируются по xcode уже – Sgillon

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