Я хочу получить один объект из моего хранилища данных Core Data, вот код, который я использовал, но он возвращает массив объектов. Должен быть более простой и лучший способ:
NSFetchRequest *request= [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Manufacturer" inManagedObjectContext:managedObjectContext];
NSPredicate *predicate =[NSPredicate predicateWithFormat:@"ManufacturerID==%@",[[mitems objectAtIndex:i] objectForKey:@"ManufacturerID"]];
[request setEntity:entity];
[request setPredicate:predicate];
NSError *error;
NSArray *entities = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
Он всегда будет возвращать массив, но вы можете сделать его более чистым:
NSFetchRequest *request= [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Manufacturer" inManagedObjectContext:managedObjectContext];
NSPredicate *predicate =[NSPredicate predicateWithFormat:@"ManufacturerID==%@",[[mitems objectAtIndex:i] objectForKey:@"ManufacturerID"]];
[request setEntity:entity];
[request setPredicate:predicate];
NSError *error;
//Making a mutable copy here makes no sense. There is never a reason to make this mutable
//NSArray *entities = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
id manufacturer = [[managedObjectContext executeFetchRequest:request error:&error] lastObject];
request = nil;
NSAssert1(error && !manufacturer, @"Error fetching object: %@\n%@", [error localizedDescription], [error userInfo]);
-lastObject
вернет последний элемент в массиве или nil, если массив пуст. Это делает ваш код немного чище, если вы знаете, что в массиве будет один объект, или если вам все равно, какой объект вы извлекаете из массива.
Кстати, названия ваших свойств должны начинаться с строчной буквы. Я удивлен, что компилятор не предупредил вас об этом.