#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. Большое вам спасибо, да, это было так… вы избавили меня от многих хлопот.