MagicalRecord 2.0.3を使用していて、データをバックグラウンドで保存する方法を実際には分かりません。複数のオブジェクトをバックグラウンドで作成する方法は?
文書によると、このような何かが動作するはずです:
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) {
// Do this hundreds of times
[MyObject createInContext:localContext];
}];
はしかし、何もデータベースに保存されません。私は複数の人がこれに似たソリューションを掲示見てきました:
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) {
// Do this hundreds of times
[MyObject createInContext:localContext];
} completion:^{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[[NSManagedObjectContext defaultContext] saveNestedContexts];
}];
}];
これは私のデータセットで(保存がメインスレッド上で発生するのでしかし、私のアプリケーションは、しばらくの間応答しない、データベース内の自分のデータを保存し、約3秒は長すぎます)。
は私もこれを試してみたが、それはまた、ブロックは、最大節約しながら:
self.queue = [[NSOperationQueue alloc] init];
[self.queue addOperationWithBlock:^{
NSManagedObjectContext *localContext = [NSManagedObjectContext contextForCurrentThread];
// Do this hundreds of times
[MyObject createInContext:localContext];
[localContext saveNestedContexts];
}];
そして最後に、このコードで同じブロッキング効果:
dispatch_queue_t syncQueue = dispatch_queue_create("Sync queue", NULL);
dispatch_async(syncQueue, ^{
NSManagedObjectContext *localContext = [NSManagedObjectContext contextForCurrentThread];
// Do this hundreds of times
[MyObject createInContext:localContext];
[[NSManagedObjectContext contextForCurrentThread] saveNestedContexts];
});
ので、最善の方法は何ですかこれを解決するには?私はバックグラウンドで何百ものオブジェクトを作成する必要があり、アプリケーションは応答し続ける必要があります。
の仕事ができる方法の例を見つけることができる新しいネストされたコンテキストがMagicalRecordで保存するAPIの多くに大混乱をもたらすために始めています。私はこれらの問題を認識していますが、いくつかの修正が今では議論されていますが、私は常に提案することができます。 – casademora
おそらく、MRのようなフレームワークなしでCore Dataを使うのが一番良いでしょうか? – Hunter
MagicalRecordを使用して解決策を見つけましたか?私は同じ問題(バックグラウンドで更新中のUIロック)を持っており、解決策を見つけることができません。ありがとう! – RyanG