Получить один объект из NSFetchRequest

Я хочу получить один объект из моего хранилища данных 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];
6
задан shim 13 February 2019 в 21:19
поделиться

1 ответ

Он всегда будет возвращать массив, но вы можете сделать его более чистым:

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, если массив пуст. Это делает ваш код немного чище, если вы знаете, что в массиве будет один объект, или если вам все равно, какой объект вы извлекаете из массива.

Кстати, названия ваших свойств должны начинаться с строчной буквы. Я удивлен, что компилятор не предупредил вас об этом.

6
ответ дан 8 December 2019 в 15:58
поделиться