NSManagedObject без его вставки: связано много - PullRequest
1 голос
/ 06 марта 2011

Мой импорт XML требует, чтобы я проверял существующий объект перед вставкой.Другими словами, мне нужно хранить каждую запись во временном управляемом объекте данных, прежде чем я решу, сохранять ее или нет.*** ПРИМЕЧАНИЕ: Пожалуйста, обратитесь к последнему ответу в этой теме:

Есть ли способ создания объекта NSManagedObject без его вставки?

Я выбрал подходпоследний ответ в приведенной выше ссылке с использованием insertIntoManagedObjectContext: nil, который помещает входящую одну запись во временный объект без контекста.

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

Прямо сейчас я вставляю записи многих таблиц в их собственный управляемый объект также с помощью nil.Вопрос в том, что когда я собираюсь сохранить одну запись, у меня также есть несколько связанных объектов, которые я создал.Как мне сохранить множество записей?Могу ли я получить их из нулевого контекста и просмотреть их?

Вот код для начала новой записи:

        // Incoming record is for the one table.
    if ([elementName isEqualToString: self.xmlRecordTagDelimiter]) {
        NSEntityDescription *entity = [NSEntityDescription entityForName:self.xmlEntityName inManagedObjectContext:xmlManagedObjectContext];
        self.xmlCurrentRecordTempObject = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];
        thisTagIsForManyTable = NO;
    }   
    // Incoming record is for the many table.
    if ([elementName isEqualToString: self.xmlManyRecordTagDelimiter]) {
        NSEntityDescription *entity = [NSEntityDescription entityForName:self.xmlRelatedManyEntityName inManagedObjectContext:xmlManagedObjectContext];
        self.xmlCurrentManyRecordTempObject = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];

        thisTagIsForManyTable = YES;
    }

И код, в котором я собираюсь сохранить запись из одной таблицы в контекст:

        [self.managedObjectContext insertObject:self.xmlCurrentRecordTempObject];

        // Store what we imported already.
        if (![self.xmlManagedObjectContext save:&error]) {
                         ...... snip.....
        }

Спасибо

Ответы [ 3 ]

3 голосов
/ 09 марта 2011

Похоже, вы думаете о nil контексте как о еще одном контексте управляемого объекта. Это не вариант. Когда вы передаете nil в качестве контекста initWithEntity:insertIntoManagedObjectContext:, вы запрашиваете, чтобы созданный управляемый объект не был вставлен в любой контекст. Он не вставлен в контекст управляемого объекта с именем nil. Он не вставлен ни в какой контекст управляемого объекта.

Итак, когда вы спрашиваете, можете ли вы получить множество объектов из контекста nil, вы отвечаете «нет». Это потому, что нет nil контекста.

Однако NSManagedObject s являются объектами. Вы можете хранить множество объектов в массиве и, когда вы собираетесь их сохранить, просто пройтись по массиву, найти множество объектов, которые вы хотите сохранить, и вставить их только в свой контекст.

1 голос
/ 08 марта 2011

Если они не находятся в контексте, они не сохраняются.Если вы отпустите их после создания, они исчезнут навсегда.

Если вы хотите создать отношения, вам нужно вставить их в NSManagedObjectContext, а затем присоединиться к ним через отношения.

Обновление из комментариев

Невозможно получить их, если вы не держите их с помощью какого-либо другого механизма, например словаря.Лично я бы сохранил их в словаре, используя уникальный ключ * в качестве ключа.

* Уникальный ключ, конечно, зависит от вас и ваших данных.

0 голосов
/ 10 марта 2011

Что я сделал, так это использовал контекст объекта nil для одной сущности и массив для хранения всех объектов из многих таблиц, пока мне не нужно их сохранить.

Спасибо всем.

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