Czy to naprawdę proste w systemie iOS5?Pobieranie danych w tle danych za pomocą nowego NSPrivateQueueConcurrencyType
kiedyś wykonać tło pobrać za pomocą tego kodu w moim AppDelegate:
dispatch_queue_t downloadQueue = dispatch_queue_create("DownloadQueue", NULL);
dispatch_async(downloadQueue, ^{
self.myDownloadClass = [[MyDownloadClass alloc]initInManagedObjectContext:self.managedObjectContext];
[self.myDownloadClass download];
});
dispatch_release(downloadQueue);
Moja klasa pobieranie wykonuje NSURLConnection się pobrać niektórych danych XML używa NSXMLParser do analizowania danych, a następnie aktualizuje złożonego schematu w podstawowych danych. Zawsze przełączałem się na główny wątek, aby faktycznie aktualizować podstawowe dane. Kod brudny, z dużą ilością połączeń do dispatch_sync (dispatch_get_main_queue() ....
Mój nowy kod wygląda następująco:
NSManagedObjectContext *child = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[child setParentContext:self.managedObjectContext];
[child performBlock:^{
self.myDownloadClass = [[MyDownloadClass alloc]initInManagedObjectContext:child];
[self.myDownloadClass download];
}];
wraz z niewielką zmianą innego kodu w moim AppDelegate aby ustawić rodzic model obiektowy typ kontekstu do NSMainQueueConcurrencyType:
- (NSManagedObjectContext *)managedObjectContext
{
if (__managedObjectContext != nil)
{
return __managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil)
{
__managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[__managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return __managedObjectContext;
}
wydaje się działać bardzo dobrze cały proces aktualizacji nadal działa w osobnym wątku, ale nie trzeba utworzyć wątku wydaje się magią
...Pamiętaj tylko, jeśli chcesz zatwierdzić zmiany w fizycznych plikach danych rdzenia, masz także zapis połączeń: w kontekście nadrzędnym.
Tak naprawdę nie zadawałem tu pytania. Publikuję to, aby pomóc innym, ponieważ wszystko, co znalazłem podczas wyszukiwania nowych metod kontekstowych obiektów zarządzanych przez iOS5, dało tylko szczegółowe informacje o wysokim poziomie bez przykładów kodu. Wszystkie inne wyszukiwania dotyczące pobierania podstawowych danych w tle są stare, czasami bardzo stare i przedyskutuj, jak to zrobić przed iOS5.
czy to naprawdę takie proste? – timthetoolman
dzięki za udostępnienie! – Max
i po tym trzeba zapisać zmiany –