#iphone #ios #core-data #insert
#iPhone #iOS #core-data #вставить
Вопрос:
Я пытаюсь вставить около 400 объектов в CoreData с помощью хранилища в памяти, но это слишком долго. Примерно на 20-30 секунд. Это нормально? Может быть, существует какой-то особый случай для многих вставок?
- (MyObject*) insertNew
{
NSEntityDescription* entityDescr = [MyObject entityDescription];
NSManagedObjectContext* ctx = [NSManagedObjectContext defaultContext];
MyObject* obj = [[[MyObject alloc] initWithEntity:entityDescr
insertIntoManagedObjectContext:ctx] autorelease];
obj.name = @"name";
obj.Id = @"an ID";
return obj;
}
Объекты находятся в иерархических отношениях друг с другом, подобно дереву.
Комментарии:
1. Вы вызываете save в контексте управляемого объекта 400 раз (например, в цикле после каждого объекта) или вы просто вызываете save один раз?
2. Можете ли вы опубликовать свой код вставки? Это, конечно, кажется медленным.
3. @ BP. Один раз после всех вставок
Ответ №1:
Прежде чем выполнять какой-либо импорт с помощью Core Data, необходимо прочитать Руководство по программированию Core Data «Эффективный импорт данных».
Это потенциально сэкономит вам огромное количество времени, особенно если импорт будет выполняться неоднократно.
Ответ №2:
Если эти данные будут импортированы при первом запуске вашего приложения, возможно, вам захочется рассмотреть возможность использования начальной базы данных, таким образом, вы сможете выполнить медленный импорт один раз во время разработки, а затем это всего лишь вопрос операции небольшого копирования.
Если ваша база данных очень большая, а места на диске не хватает, возможно, вам захочется поискать другое решение, поскольку при этом может потребоваться больше дискового пространства, чем необходимо (начальная база данных будет находиться в комплекте и каталоге documents).