Удалить запрос и синхронизировать 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, он уведомляет контекст управляемого объекта основного потока, чтобы сохранить изменения.

Другие вопросы по тегам