ユーザーがページを更新するたびに、大量のデータをJSON形式(2000個以上のエンティティ)でCore Dataにロードしています。私が今やっていることはうまくいくが時間がかかるだけだ。何らかの種類のページネゴシエーションを検討していましたが、バックエンドの変更が必要です。うまくいけば誰かがプロセスを最適化するのを助けてくれることを願っていますまたは、iOSに大量のデータを保存する別のソリューションを教えてください。ここで大量のデータをコアデータに保存する
は、ほとんどの時間を要する部分である:
[moc performBlock:^{
for (NSDictionary *dictionary in dataObjectsArray) {
NSPredicate *predicate = [ObjectA predicateWithDictionary:dictionary];
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:ENTITY_NAME];
request.predicate = predicate;
NSError *error;
NSArray *fetchedObjects = [moc executeFetchRequest:request
error:&error];
ObjectA *objectATemp = (ObjectA *)[fetchedObjects lastObject];
if (!objectATemp) {
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:ENTITY_NAME
inManagedObjectContext:moc];
objectATemp = [[ObjectA alloc] initWithEntity:entityDescription
insertIntoManagedObjectContext:moc];
}
[ObjectA setObjectA:objectATemp
dictionary:dictionary];
// check if user already liked the ObjectA
ObjectB *likedObject = [ObjectB objectBWithId:objectATemp.id];
if (likedObject &&
!objectATemp.user_liked.boolValue) {
[likedObject.managedObjectContext deleteObject:likedObject];
}
}
NSError *error;
if ([moc hasChanges] &&
![moc save:&error]) {
NSLog(@"%@", error);
}
// saving Context
NSManagedObjectContext *managedObjectContext = [self newManagedObjectContext];
[managedObjectContext performBlock:^{
NSError *error;
if ([managedObjectContext hasChanges] &&
![managedObjectContext save:&error]) {
NSLog(@"%@", error);
}
if (completionHandler) {
completionHandler();
}
}];
}];
任意のアドバイスは喜んでいます。
何も変更されていない場合でも、エントリの削除や作成を回避できる方法はありますか?現在の情報をメモリに保持して新しい情報を比較し、変更をコアデータにのみ保存できますか?メモリ操作でははるかに高速になります。 – Paulw11
コアデータを使用して大量のデータを格納することは問題ありません。 **多くの新しいデータを保存する**ユーザーがボタンをタップするたびに**は遅くなります。 ** ** ** **すべての**そのデータの読み込みを避けることができるいくつかの方法はありますか? –