0

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

将自身暴露给 Web 服务的方法如下

-(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 获取相关数据之前退出.

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

谢谢

4

1 回答 1

0

NSData为says创建一个属性fetchedData。在 .h 中并在 .m 中合成它

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

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

[self performSelectorOnMainThread:@selector(rollBar:)
      withObject:nil
      waitUntilDone:false];
于 2013-06-17T10:13:14.837 回答