В вашем заголовочном файле вы должны настроить изменяемый массив для ваших машин.
NSMutableArray *carArray;
и
@property (nonatomic, retain) NSMutableArray *carArray;
Затем обязательно синтезируйте его в файле реализации.Затем, когда вы извлекаете данные из контекста управляемого объекта, вы можете установить свой массив с возвращенным содержимым
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Car" inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:entity];
// Execute the fetch -- create a mutable copy of the result.
NSError *error = nil;
NSMutableArray *mutableFetchResults = [[self.managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy];
if (mutableFetchResults == nil) {
// Handle the error.
NSLog(@"[AddCarViewController] deselect car: car not found.");
} else {
[self setCarArray:mutableFetchResults];
}
. Это сделает все объекты в контексте управляемого объекта, поэтому, когда вы захотите изменить автомобиль, вы можете найти его там вместо того, чтобы искать снова.Если вам нужно его отсортировать, вы можете применить дескриптор сортировки, инициализированный одним из ваших атрибутов в качестве ключа.Например:
NSSortDescriptor *sorter = [NSSortDescriptor sortDescriptorWithKey:@"selected" ascending:YES];
[carArray sortUsingDescriptors:[NSArray arrayWithObject:sorter]];
Это позволит отсортировать автомобили в зависимости от того, выбраны они или нет.
Что касается причин возникновения ошибки, это может быть одной из многих причин.Обычно MOC не может сохранить, если один из ваших атрибутов установлен в nil, так что это может быть причиной.Вы можете получить некоторые подробности из этого, если вы установите что-то вроде следующего:
if (![self.managedObjectContext save:&error]) {
NSLog(@"failed with error %@", error);
}
Это вернет фактическую ошибку, с которой вы столкнулись.Также было бы неплохо настроить журнал, чтобы убедиться, что у вас указан автомобиль.Что-то вроде NSLog(@"selected car %@", carToSave);
просто чтобы быть в безопасности