Удалить запрос и синхронизировать RESTkit с основными данными и потоками
Чтобы было ясно... Мои цели: -
1. Сделайте запрос на удаление сервера (готово), я получаю ответ, но не уверен, синхронизирован ли он с базой данных ядра или нет. поэтому мне нужно знать, как удалить конкретный объект из БД с помощью Restkit.
2. Путаница с ManagedObjectContext - я слишком запутался с контекстом и потоками. Я использую везде для всей моей работы этот контекст.:- [RKObjectManager sharedManager].managedObjectStore.mainQueueManagedObjectContext] Но я хочу сохранить обработку в потоке Bg и получить результат в основном потоке для обновления. Теперь есть некоторая концепция дочернего контекста. Как использовать это загадка до сих пор для меня.
3. Если я хочу использовать многопоточность, для выполнения запроса к серверу используйте Restkit и mapping. Как использовать управляемый объект контекста. (Я имею в виду правильный способ его использования)
1 ответ
Вы можете использовать приведенный ниже код для управления NSManagedObjectContext в многопоточном
- (void)mergeChanges:(NSNotification*)notification
{
NSLog(@"[mergeChanges] enter");
// save changes to manageObjectContext on main thread
AppDelegate *theDelegate = [[UIApplication sharedApplication] delegate];
[[theDelegate managedObjectContext] performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)
withObject:notification
waitUntilDone:YES];
NSLog(@"[mergeChanges] leave");
}
- (NSManagedObjectContext*)startThreadContext
{
AppDelegate *theDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *newMoc = [[NSManagedObjectContext alloc] init];
[newMoc setPersistentStoreCoordinator:[theDelegate persistentStoreCoordinator]];
// Register for context save changes notification
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(mergeChanges:)
name:NSManagedObjectContextDidSaveNotification
object:newMoc];
return newMoc;
}
- (void)stopThreadContext:(NSManagedObjectContext*)context
{
[[NSNotificationCenter defaultCenter] removeObserver:self
name:NSManagedObjectContextDidSaveNotification
object:context];
}
В начале контекста потока вы можете вызвать
-(NSManagedObjectContext*)startThreadContext
и используйте новый NSManagedObjectContext в потоке, и вы можете удалить NSManagedObjectContext, когда ваш поток будет завершен. Каждый раз, когда вы сохраняете новый NSManagedObjectContext, он уведомляет контекст управляемого объекта основного потока, чтобы сохранить изменения.