在HTTP响应中保存核心数据对象

时间:2015-07-17 05:24:26

标签: ios core-data

考虑下面这段代码,这是一个获取特定用户名的用户数据的简单请求。

- (void)updateInformation
{
    AFHTTPRequestOperationManager *httpManager = [AFHTTPRequestOperationManager sharedManager];
    NSDictionary *params = @{@"username": self.username};
    AFHTTPRequestOperation *operation = <create_op>

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id response){
        // use response to populate user
        // self.fullname = response[@"fullname"];
    }failure:nil];

    [httpManager.operationQueue addOperation:operation];
}

此代码是特定实体类别的一部分,例如User

现在通常在scheduleBlock中调用此方法。 scheduleBlockhttp://cocoadocs.org/docsets/XMPPFramework/3.6.1/Classes/XMPPCoreDataStorage.html#//api/name/scheduleBlock:):

  

此方法异步调用storageQueue上的给定块(dispatch_async)。

现在我的问题很简单 - 与实际调用storageQueue方法的updateInformation相比,请求响应在另一个线程中收到=&gt;需要创建一个不同的托管对象上下文来存储对象,然后将这些更改与存储队列的上下文同步。 这是对的吗?

另一个问题是 - 是否有更好的方法来处理这种情况,即不创建新的上下文并尝试将其与存储队列上下文同步?

1 个答案:

答案 0 :(得分:1)

您可以使用相同的上下文,但由于您是从另一个线程/队列进入的,因此您需要将核心数据处理代码包装在performBlock:performBlockAndWait:中,以便处理完成在与上下文关联的正确线程上。