删除请求并将 RESTkit 与核心数据和线程同步

Posted

技术标签:

【中文标题】删除请求并将 RESTkit 与核心数据和线程同步【英文标题】:Delete request and sync RESTkit with core data and threading 【发布时间】:2013-03-12 05:43:01 【问题描述】:

要清楚... 我的目标:-

1. 向服务器发出删除请求(完成),我得到响应但不确定它是否与核心数据数据库同步。因此,我需要知道如何使用 Restkit 从 db 中删除特定对象。

2. ManagedObjectContext 混淆——我对上下文和线程感到困惑。 我在任何地方都在使用这个上下文来进行所有操作。 :- [RKObjectManager sharedManager].managedObjectStore.mainQueueManagedObjectContext] 但我想继续在 Bg 线程上处理并在主线程上接收结果以进行更新。 现在有一些子上下文的概念。如何使用它对我来说是一个难题。

3. 如果我想使用多线程,使用 Restkit 和映射来发出服务器请求。如何使用托管对象上下文。 (我的意思是正确的使用方法)

【问题讨论】:

【参考方案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 时,它会通知主线程的托管对象上下文以保存更改。

【讨论】:

嘿,是的……如果一个人直接使用核心数据似乎没问题。但是,在我的情况下,它通过 Restkit 间接使用 Core Data。那么,当我们使用 Restkit 时,如何确保这是正确的方式。

以上是关于删除请求并将 RESTkit 与核心数据和线程同步的主要内容,如果未能解决你的问题,请参考以下文章

使用 RESTkit PUT 请求、更改标头并将响应保存在核心数据中

iOS:RESTKit 与 CoreData 同步数据

在 Restkit 执行映射操作之前删除 Core data 中的现有对象

在核心数据中删除数据库中的对象的策略。 [RestKit/核心数据]

RestKit 数据同步场景需要帮助

Restkit核心数据明细数据