我有一个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获取之前退出相关数据。
有人能告诉我处理这种情况的最佳推荐方法吗?我不是要求样本代码或任何东西,只是正确的方向应该足够了。我正在寻找一个永久的解决方案而不是黑客或简单的解决方法。
谢谢
答案 0 :(得分:0)
为NSData
创建一个属性fetchedData
。在.h中并在.m
然后在获取日期之后设置此属性,然后调用所需的方法。有一些委托告诉你数据数据加载完成,所以你可以在后台设置属性,你可以在主线程上调用UI更新方法,为你提供所需的结果。
你可以使用这样的选择器来调用主线程
[self performSelectorOnMainThread:@selector(rollBar:)
withObject:nil
waitUntilDone:false];