【发布时间】:2012-02-03 11:44:22
【问题描述】:
使用同步请求存在问题。问题是我不确定如何重构下面的代码以使用异步请求来完成以下两个任务:
- 使用
UIActivityIndicatorView子视图通知活动提取; - 在连接请求之前实施
Reachability检查,以确保存在互联网连接并且主机可用,即reachabilityWithHostName:@"wwww.mywebhostingisterrible.com"。
目前我有一个 Fetcher 类和一个 +(Fetcher *)sharedFetcher 单例,在我的所有视图控制器中都使用它来获取数据。目前所有数据都是使用以下代码获取的:
- (NSString *)stringWithUrl:(NSURL *)url {
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];
NSData *urlData;
NSURLResponse *response;
NSError *error;
urlData = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&error];
return [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
}
获取的方法如下所示:
-(NSArray *)fetchDogFoodListing {
NSString *urlString = [NSString stringWithFormat:@"%@query/dogFood/%@/%lli/%@/%@",self.connectionUrl,self.queryCriteria.dogFoodName,self.queryCriteria.dogFoodBrandId,self.queryCriteria.dogFoodIngredients,self.queryCriteria.dogFoodBrand];
NSString *json = [self stringWithUrl:[NSURL URLWithString:urlString]];
return [self.factory buildIKDogFoodArrayWithJSON:json];
}
来自UIViewController 在-(void)viewDidLoad 中的呼叫如下所示:
self.dogFoods = [[IKFetcher sharedFetcher] fetchDogFoodListing];
我曾考虑在这种情况下实施委托,但我对委托应该如何工作感到非常不安。我什至不确定它应该走哪条路。 Fetcher 是否应该有一个 FetcherDelegate 可以通知视图控制器何时完成,以便 UI 可以更新?视图控制器是否应该有一个委托,以便 fetcher 可以在完成工作时更新视图?
我确信根据我的问题,您可以看出我对委派缺乏经验,因此我将不胜感激。
【问题讨论】:
标签: iphone ios cocoa uiactivityindicatorview delegation