addObject для отношений один / многие ко многим в основных данных для iPhone - PullRequest
1 голос
/ 07 января 2010

В моем xcdatamodel есть 2 следующих объекта:

  1. Матрица 1.1 Атрибуты название 1.2 Отношения MatrixToProcess Назначение: Процесс Обратное есть: ProcessToMatrix Отношение ко многим проверяется Правило удаления - каскад

  2. Процесс 2.1 Атрибуты название 2.2 Отношения ProcessToMatrix Назначение: Матрица Обратное есть: MatrixToProcess Отношение ко многим не проверяется Правило удаления равно нулю

Я могу успешно добавить новую матрицу, которая добавляется и правильно отображается в UITableView.

Я могу успешно добавить новый процесс, однако, Вся необходимая информация добавляется в базу данных с ИСКЛЮЧЕНИЕМ значения Z_PK из таблицы Matrix. Т.е. база данных sqlite в симуляторе iPhone создаст новое имя процесса, но НЕ вводит какую-либо информацию в столбец ZPROCESSTOMATRIX. Если я вручную вставлю соответствующее значение Matrix Name Z_PK, все будет работать.

Я борюсь с. не совсем понимаю, как добавить addObject в Process * newProcess = [NSEntityDescription insertNewObjectForEntityForName: @ "Process" inManagedObjectContext: self.managedObjectContext]; Это код, который я использую:

- (void)addProcess:(id)sender {
    ProcessAddViewController *addController = [[ProcessAddViewController alloc] initWithNibName:@"ProcessAddView" bundle:nil];
    addController.delegate = self;  
    Process *newProcess = [NSEntityDescription insertNewObjectForEntityForName:@"Process" inManagedObjectContext:self.managedObjectContext];
    addController.process = newProcess;
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:addController];
    [self presentModalViewController:navigationController animated:YES];    
    [navigationController release];
    [addController release];
}

- (void)processAddViewController:(ProcessAddViewController *)processAddViewController didAddProcess:(Process *)process {
    if (process) {        
        [self showProcess:process animated:NO];
    }

    [self dismissModalViewControllerAnimated:YES];
}


- (void)showProcess:(Process *)process animated:(BOOL)animated {
    RootViewController *rootViewController = [[RootViewController alloc] initWithStyle:UITableViewStyleGrouped];
    rootViewController.managedObjectContext = self.managedObjectContext;    
    if(entitySearchPredicate == nil)
    {
        NSMutableArray* mutableFetchResults = [CoreDataHelper getObjectsFromContext:self.entityName :@"displayOrder" :YES :managedObjectContext];       
        [self setEntityArray:mutableFetchResults];
        [mutableFetchResults release];
    }
    else
    {
        NSMutableArray* mutableFetchResults = [CoreDataHelper searchObjectsInContext:self.entityName :entitySearchPredicate :@"displayOrder" :YES :managedObjectContext];
        [self setEntityArray:mutableFetchResults];
        [mutableFetchResults release];
    }
    [rootViewController release];
}

Любая помощь и / или направление будет принята с благодарностью.

1 Ответ

0 голосов
/ 07 января 2010

Вам необходимо установить отношения между новым процессом и матрицей.

Проверьте этот ответ на данные ядра iphone, вставка новых объектов вопрос .

ОБНОВЛЕНИЕ

Предполагая, что вы сгенерировали файлы классов для Process, а Matrix AND Process имеет отношение к Matrix с именем "processToMatrix", код для установки отношения будет:

newProcess.processToMatrix = matrix;

где "матрица" - объект Matrix, который должен быть связан с новым объектом Process.

...