Używam MagicalRecord 2.0.3 i nie mogę dowiedzieć się, jak zapisać dane w tle.Jak utworzyć wiele obiektów w tle?
Zgodnie z dokumentacją, coś jak to powinno działać:
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) {
// Do this hundreds of times
[MyObject createInContext:localContext];
}];
Jednak nic nie jest zapisywane do bazy danych. Widziałem wiele osób opublikowania rozwiązania podobnego do tego:
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext) {
// Do this hundreds of times
[MyObject createInContext:localContext];
} completion:^{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[[NSManagedObjectContext defaultContext] saveNestedContexts];
}];
}];
ten zapisuje moich danych w bazie danych, ale skoro Zapisz się stanie w głównym wątku, moja aplikacja nie reaguje na chwilę (z mojego zbioru danych, około 3 sekund, czyli o wiele za długo).
Próbowałem już także to, ale także blokuje się podczas zapisywania:
self.queue = [[NSOperationQueue alloc] init];
[self.queue addOperationWithBlock:^{
NSManagedObjectContext *localContext = [NSManagedObjectContext contextForCurrentThread];
// Do this hundreds of times
[MyObject createInContext:localContext];
[localContext saveNestedContexts];
}];
I wreszcie sam efekt blokujący z tym kodem:
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];
});
Więc, co jest najlepszym sposobem rozwiązać ten problem? Potrzebuję utworzyć setki obiektów w tle, a aplikacja musi pozostać responsywna.
Nowe konteksty zagnieżdżone zaczęły siać spustoszenie na wiele zapisywanie API w MagicalRecord. Chociaż zdaję sobie sprawę z tych problemów, a niektóre poprawki są obecnie omawiane, jestem zawsze otwarty na sugestie. – casademora
Być może najlepiej wykorzystać Core Data bez frameworka takiego jak MR? – Hunter
Czy kiedykolwiek znalazłeś rozwiązanie za pomocą MagicalRecord? Mam takie same problemy (blokowanie interfejsu użytkownika podczas aktualizacji w tle) i nie mogę znaleźć rozwiązania. Dzięki! – RyanG