0
在UIViewController
viewDidAppear
事件中,我想从Web服务获取一些数据。而这样的代码:“[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]”使UI无响应
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSArray *arr = [self getCarList];
}
- (NSArray *)getCarList
{
if (!carList) {
ARequset *req = [[ARequset alloc] init];
[NetService sendRequest:req respClass:[Resp class] success:^(BaseResponse *response)
{
//after finished
self.requestFinished = YES;
} fail:^(NSInteger errcode, NSString *errmsg) {
self.requestFinished = YES;
}];
while (!self.requestFinished) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
}
return carList;
}
时至运行请求成功块将不被执行,并且UI变得没有反应。
但如果我改变这样的- (void)viewDidAppear:(BOOL)animated
,一切顺利。
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self performSelector:@selector(getCarList) withObject:self afterDelay:1];
}
但是,getCarList方法位于单例类中。我想用一个单例来保存cardList。是卡列表不是零,直接返回,否则请求从服务器返回。 @vadian – bohan
我编辑帖子向你展示另一种方式 – vadian
呵呵你一脸(非常感谢)@vadian – bohan