Я получаю некоторые данные с сервера, и мне нужно их проанализировать. Затем некоторые результаты анализа могут быть сохранены с использованием основных данных.
теперь это мой код:
- (void)receiveSomeMessage:(NSString *)message
{
[self performSelectorInBackground:@selector(parseMessage:) withObject:message];
}
- (void) parseMessage:(NSString *)message
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSManagedObjectContext *BGMOC = [[NSManagedObjectContext alloc] init];
[BGMOC setPersistentStoreCoordinator:[self.appDelegate persistentStoreCoordinator]];
//parse it
//write to core data
NSNotificationCenter *dnc = [NSNotificationCenter defaultCenter];
[dnc addObserver:self selector:@selector(addContextDidSave:) name:NSManagedObjectContextDidSaveNotification object:BGMOC];
NSError *saveError;
if (![BGMOC save:&saveError]) {
//handle the error
}
[dnc removeObserver:self name:NSManagedObjectContextDidSaveNotification object:BGMOC];
}
- (void)addContextDidSave:(NSNotification*)saveNotification {
// Merging changes causes the fetched results controller to update its results
[self.appDelegate.managedObjectContext mergeChangesFromContextDidSaveNotification:saveNotification];
}
Кажется, это работает.
Но в документе Apple говорится: сохранение в фоновом потоке подвержено ошибкам.
Так что мне интересно, эта работа:
-(void) parseMessage:(NSString *)message
{ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
//parse it and save it to a dictionary
[self performSelectorOnMainThread:@selector(saveToCoreData:) withObject:dictionary waitUntilDone:YES];
[pool release];
}
После разбора сообщения я упаковываю его в словарь и передаю его основному потоку и выполняю там основные данные. Это работает? если работает, то лучше?
Спасибо.