Мне нужно загружать много данных через API и использовать это для создания новых или обновления существующих объектов и их отношений по мере продвижения. Правильно ли это? Кажется, это так долго, я чувствую, что здесь что-то не хватает.Это лучший способ загрузить существующие, иначе создайте новые NSManagedObjects?
// Check for existing Object
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Object" inManagedObjectContext:managedObjectContext]];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"name == %@", objectName]];
[fetchRequest setFetchLimit:1];
NSError *error = nil;
NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (results == nil) {
NSAssert(NO, @"Error executing fetch: %@\n%@", [error localizedDescription], [error userInfo]);
}
Object *object = [results lastObject];
if (object == nil) {
// Create new object
object = [NSEntityDescription insertNewObjectForEntityForName:@"Object" inManagedObjectContext:managedObjectContext];
object.name = objectName;
}
// Check for existing Other
fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Other" inManagedObjectContext:managedObjectContext]];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"name == %@", otherName]];
[fetchRequest setFetchLimit:1];
results = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (results == nil) {
NSAssert(NO, @"Error executing fetch: %@\n%@", [error localizedDescription], [error userInfo]);
}
Other *other = [results lastObject];
if (other == nil) {
// Create new Other
other = [NSEntityDescription insertNewObjectForEntityForName:@"Other" inManagedObjectContext:managedObjectContext];
other.name = otherName;
}
// Finally
[object addOtherObject:other]; // A many-to-many relationship
if (![managedObjectContext save:&error]) {
NSAssert(NO, @"Error saving context: %@\n%@", [error localizedDescription], [error userInfo]);
}
Все это, конечно, внутри петли, оно кажется ужасно неэффективным.
Посмотрите на магическую запись и Mogenerator. Core Data полон код шаблона, библиотеки библиотек удаляют большую часть из них – Antzi
Это все о наборах. Вместо того, чтобы извлекать одну сущность за раз в цикле, выберите все сразу. Затем вы можете выяснить, какие объекты не существуют в результатах и создать их. – Avi