2013-03-20 2 views
0

Существует базовая модель данных с двумя объектами i мое приложение iOS.iOS несколько разрешений для одного управляемого объектаОбъект

Entity: Unit/Атрибуты: unit_name - NSString

- >> Отношение к Exercise (one to many)

Entity: Упражнение/Атрибуты: exercise_name - NSString.

Таким образом, один unit может иметь много exercises.

В моем контроллере просмотра таблицы доступны все exercises. (Таким образом, в первый раз, я сделать выборку запроса на Exercise сущности и managedObjectContext точки к этой сущности.

Если я хочу, чтобы спасти "NEW"unit с exercises сохранения функция не работает. Eсть . нет ошибки на всех, но unit таблица пуста

Здесь пока код для функции сохранения:

Units *newUnit = [NSEntityDescription insertNewObjectForEntityForName:@"Units" inManagedObjectContext:[self.coreDataHelper managedObjectContext]]; 
    newUnit.unit_name = unitTextField.text;//Attribute 
    newUnit.exercises = exerciseSet;//Relationship (NSSet) 

    NSError *error = nil; 
    if (![[self.coreDataHelper managedObjectContext]save:&error]) { 
     NSLog(@"There was an error! %@", error); 
    } 
    else { 
     NSLog(@"Success!"); 
    } 

Похоже, что managedObjectContext еще указывает на объект Exercise. (Поскольку он был впервые инициализирован этим объектом) coreDataHelper имеет NSPersistentStoreCoordinator, NSManagedObjectContext, NSManagedObjectModel и некоторые способы чтения и удаления.

Спасибо за помощь!

+2

У вас есть опечатка или у вашего кода есть «Единицы» в методе insertNewObjectForEntityName, в то время как вы сказали, что ваше лицо является Unit? – rdelmar

+2

Любой объект будет сохранен, содержащий контекст. Убедитесь, что self.coreDataHelper не равен null и что вы правильно передаете это текущему контроллеру. –

ответ

0

Просто чтобы убедиться, что все взаимосвязано так, как это должно быть, добавить

NSAssert(self.coreDataHelper, @"null coreDataHelper"); 
NSAssert(self.coreDataHelper.managedObjectContext, @"null MOC"); 
NSLog(@"available entities: %@", 
    self.coreDataHelper.managedObjectContext.persistentStoreCoordinator.managedObjectModel.entitiesByName); 

Вы должны видеть "Units" в качестве одного из субъектов, если вы установили все правильно.

И после того, как вы ввели newUnit, убедитесь, что он сработал: NSAssert (newUnit, @ "newUnit не вставлен");

Это пахнет логической ошибкой для меня, кстати: вы создаете новый экземпляр единиц каждый раз, когда вы его сохраняете? Вы уверены, что не хотите использовать шаблон поиска или создания?

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