考虑下面这段代码,这是一个获取特定用户名的用户数据的简单请求。
- (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
中调用此方法。 scheduleBlock
(http://cocoadocs.org/docsets/XMPPFramework/3.6.1/Classes/XMPPCoreDataStorage.html#//api/name/scheduleBlock:):
此方法异步调用storageQueue上的给定块(dispatch_async)。
现在我的问题很简单 - 与实际调用storageQueue
方法的updateInformation
相比,请求响应在另一个线程中收到=&gt;需要创建一个不同的托管对象上下文来存储对象,然后将这些更改与存储队列的上下文同步。 这是对的吗?
另一个问题是 - 是否有更好的方法来处理这种情况,即不创建新的上下文并尝试将其与存储队列上下文同步?
答案 0 :(得分:1)
您可以使用相同的上下文,但由于您是从另一个线程/队列进入的,因此您需要将核心数据处理代码包装在performBlock:
或performBlockAndWait:
中,以便处理完成在与上下文关联的正确线程上。