Эффективно обновлять NSManagedObjects в CoreData - PullRequest
1 голос
/ 20 февраля 2012

У меня большой объем данных, сохраненных с использованием Core Data Framework. Всегда есть много обновлений, которые нужно сделать. Проблема в том, что эти обновления занимают слишком много времени.

Причина этого в том, что для каждой записи в моей базе данных я должен сделать запрос, чтобы получить соответствующий NSObjectModel, а затем обновить его атрибуты. Поскольку есть много данных для просмотра, это занимает много времени. Если я только создаю новые объекты и вставляю их в свою базу данных, это занимает гораздо меньше времени, что, конечно, имеет смысл.

Так что мой вопрос, есть ли более эффективный способ сделать это, потому что я действительно говорю о минутах, а не секундах.

Как я уже сказал, мне приходится очень часто получать объекты из базы данных. Вы можете увидеть это в коде ниже. Может быть, это помогает понять, где моя проблема:

while (additiveElement != nil) {            
            //Get Product
            Product *product = [Product productWithID:additivID inManagedObjectContext:self.managedObjectContext];

            //Get ProductLanguage
            ProductLanguage *productLanguage = [ProductLanguage productLanguageWithLanguage:self.currentLanguage andProductID:additivID inManagedObjectContext:self.managedObjectContext];
            productLanguage.language = self.languageEntity;

            product.productID = additivID;
            productLanguage.name = additivName;
            productLanguage.text = additivText;
            productLanguage.product = product;
            product.productFamily = [ProductFamily familyWithID:additivFamilyID inManagedObjectContext:self.managedObjectContext];

            if (productFiles != nil) {                    
                    File *file = [File fileWithName:fileName inManagedObjectContext:self.managedObjectContext];
                    file.fileName = fileName;
                    file.fileSize = fileSize;
                    file.fileDateNew = fileDate;
                    file.fileType = fileType;
                    file.language = [Language languageWithAbbreviation:@"en"  inManagedObjectContext:self.managedObjectContext];
            }
}
...