0
私はWebサービス(15.000アドレス)からアドレスのリストをダウンロードしています。すべてのアドレスを取得するには800ms、CoreDataに書き込むにはさらに15秒かかりました。CoreData書き込みオブジェクトが遅い
AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *managedObjectContext = delegate.managedObjectContext;
for (NSDictionary *dict in addresses) {
[self saveAddressesToCoreDataWithDictionary:dict andManagedObject:managedObjectContext];
}
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"alreadyDownloaded"];
と方法:考え出し
-(void)saveAddressesToCoreDataWithDictionary:(NSDictionary *)dict andManagedObject:(NSManagedObjectContext *)managedObject
{
NSManagedObject *address;
address = [NSEntityDescription insertNewObjectForEntityForName:@"Address" inManagedObjectContext:managedObject];
[address setValue:[[dict objectForKey:@"lat"] stringValue] forKey:@"lat"];
[address setValue:[[dict objectForKey:@"lon"] stringValue] forKey:@"lon"];
[address setValue:[dict objectForKey:@"addressLong"] forKey:@"addressLong"];
[address setValue:[dict objectForKey:@"addressShort"] forKey:@"addressShort"];
NSError *error;
[managedObject save:&error];
}
私が正しく覚えていれば、すべてのNSDictionaryオブジェクトを 'Address'エンティティ(' NSManagedObject')に変換し、それらを(NSManagedObjectContext'で)保存した後、もっと時間がかかります。あなたは、 "Core Data Save Batch"を探して、より多くの情報を得ることができます:http://stackoverflow.com/questions/4145888/ios-coredata-batch-insert – Larme
@Larmeヒント?私はcdで多くの経験がありません。 – Stefan
https://developer.apple.com/library/prerelease/content/documentation/Cocoa/Conceptual/CoreData/CreatingObjects.html#//apple_ref/doc/uid/TP40001075-CH5-SW4 'save:'メソッドを使用しました'NSManagedObjectContext'から' save: 'メソッドを使用できる' NSManagedObject'から取得します。あなたのすべての 'NSManagedObject'を作成し、コンテキストで保存を実行してください。 – Larme