В Xcode NSFetchRequest возвращает только объекты, но не их атрибуты

#ios #xcode #core-data #nsfetchrequest

#iOS #xcode #core-data #nsfetchrequest

Вопрос:

У меня есть следующий код для извлечения набора «проектов» из основных данных (каждый «Проект» имеет некоторые атрибуты, например, «заголовок», «время», «Время окончания», «оплата» и т.д.):

 NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Project" inManagedObjectContext:__managedObjectContext];
    [request setEntity:entity];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"endTime" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [request setSortDescriptors:sortDescriptors];


    NSError *error = nil;
    NSMutableArray *mutableFetchResults = [[__managedObjectContext executeFetchRequest:request error:amp;error] mutableCopy];
    if (mutableFetchResults == nil) {
        // Handle the error.
    }

    [self setEventsArray:mutableFetchResults];
 

Однако возвращаются только проекты, а не их атрибуты : <NSManagedObject: 0x154010> (entity: Project; id: 0x1dad70 <x-coredata://85BD9DF1-B41B-4234-8397-C2F568D0CC7A/Project/p3> ; data: <fault>

Должен ли я извлекать атрибуты отдельно или я что-то пропустил? Спасибо.

Комментарии:

1. Каков жизненный цикл вашего __managedObjectContext? Возможно, вы используете ARC, чтобы NSManagedContext освобождался после его вызова 2. time?

Ответ №1:

Нормально видеть ошибку при выборке. Ошибки — это резервные или «призрачные» объекты, которые представляют место управляемого объекта в графе объектов без накладных расходов на загрузку множества данных атрибутов, которые могут никогда не понадобиться.

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

Вновь созданные объекты или изменения атрибутов существующих объектов не будут сохранены на диске, пока вы не вызовете save в контексте управляемого объекта.

Ответ №2:

data: <fault> просто означает, что атрибуты еще не загружены. Как только вы получите доступ к атрибутам, они будут извлечены из базы данных.

Комментарии:

1. о, хорошо, но тогда почему он не загружает атрибуты, которые я сохранил в последнем сеансе, который я использовал: NSManagedObject *object = [self detailItem]; [object setValue:self.title forKey:@"title"]; чтобы сохранить их, они должны загружаться в метки, кстати

2. Вы уверены, что они не загружены? Попробуйте напечатать только один из этих атрибутов, а не печатать весь объект.

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

4. Вы вызывали save свой MOC?

5. Большое вам спасибо, да, это было так… вы избавили меня от многих хлопот.