在iOS上进行后台提取并处理返回的数据

时间:2013-06-17 10:02:52

标签: objective-c core-data nsthread

我有一个DataManager类,负责获取数据并将其交给DatabaseManager,然后将其插入到核心数据中。

将自己暴露给网络服务的方法在

之下
-(void)fetchDetailsForId:(NSString *)userId withFieldInformation:(NSString *)fieldInfo
{
    if (SessionIsActive) {
        [APIRequester startWithRequest:[NSString stringWithFormat:@"%@?%@",userId, fieldInfo]
completionHandler:^(APIConnectionManager *connection, id user, NSError *error) {
            //This is where the results are returned and the API manages its own threads and returns the result lazily
        }];
    }
}

上述方法在DataManager类中。现在,同一个类中的一些方法调用上面的方法从服务器获取数据。然后将获取的数据转发到DatabaseManager以插入核心数据。这个样本是

-(void)fetchCurrentDataForLoggedInUser
{
    NSData *fetchedData = [self fetchDetailsForId:loggedInId withFieldInformation:@"all"];
        //the fetchedData is then forwarded to DatabaseManager
}

现在,由于web方法(第一种方法)获取后台线程中的数据(由API管理),因此上述方法中“fetchedData”的值将为null,因为Web方法在API获取之前退出相关数据。

有人能告诉我处理这种情况的最佳推荐方法吗?我不是要求样本代码或任何东西,只是正确的方向应该足够了。我正在寻找一个永久的解决方案而不是黑客或简单的解决方法。

谢谢

1 个答案:

答案 0 :(得分:0)

NSData创建一个属性fetchedData。在.h中并在.m

中合成它

然后在获取日期之后设置此属性,然后调用所需的方法。有一些委托告诉你数据数据加载完成,所以你可以在后台设置属性,你可以在主线程上调用UI更新方法,为你提供所需的结果。

你可以使用这样的选择器来调用主线程

[self performSelectorOnMainThread:@selector(rollBar:)
      withObject:nil
      waitUntilDone:false];