В Xcode 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:&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>

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


person Elliot Greenwood    schedule 28.10.2011    source источник
comment
Каков жизненный цикл вашего __managedObjectContext? Возможно, вы используете ARC, чтобы NSManagedContext освобождался после вызова 2. времени?   -  person Phlibbo    schedule 28.10.2011


Ответы (2)


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

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

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

person TechZen    schedule 29.10.2011

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

person edsko    schedule 28.10.2011
comment
о, хорошо, но тогда почему он не загружает атрибуты, которые я сохранил в последнем сеансе, который я использовал: NSManagedObject *object = [self detailItem]; [object setValue:self.title forKey:@"title"]; чтобы сохранить их, они должны загружаться в метки, кстати - person Elliot Greenwood; 28.10.2011
comment
Вы уверены, что они не загружены? Попробуйте распечатать конкретно эти атрибуты, а не весь объект. - person edsko; 28.10.2011
comment
у меня есть напечатанные на этикетках и текстовых полях, но он загружает данные, которые я ввел, когда я изначально создавал проект, а не отредактированные значения - person Elliot Greenwood; 28.10.2011
comment
Вы звонили save на свой MOC? - person edsko; 28.10.2011
comment
Большое вам спасибо, да, это было... вы избавили меня от многих проблем. - person Elliot Greenwood; 28.10.2011
comment
Привет, по какой-то странной причине он перестал работать, я не трогал код с тех пор, просто был в магазинах, вернулся, попробовал еще раз, и он начал делать то, что делал раньше? - person Elliot Greenwood; 28.10.2011