嘿,实际上我在一个url请求块中使用了执行选择器,一开始它工作得很好,但是现在它不执行这个函数了
所执行选择器功能
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; // you need to convert to dictionary object
NSLog(@"requestReply: %@", jsonDict);
self.tmp=[jsonDict valueForKey:@"otp"] ;
self.str=self.tmp;
NSLog(@"tmp storage inside block:%@",self.tmp);
// [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateStatus) userInfo:nil repeats:YES];
[self performSelector:@selector(updateStatus) withObject:self afterDelay:1.0];
}] resume];
}
和更新状态的方法,
-(void)updateStatus{
NSLog(@" storage:%@",self.str);
NSLog(@"tmp storage:%@",self.tmp);
[ self performSegueWithIdentifier:@"b1" sender:self];
}
由于它没有执行,我无法执行segue,应用程序停留在同一页面
4条答案
按热度按时间lawou6xi1#
简单,在主线程中更新UI
备选案文2
否则创建简单方法
并在主线程中调用该方法
已更新代码
并将方法调用为
8gsdolmq2#
如果从后台线程调用
performSelector
,它将不起作用。请尝试以下操作...n53p2ov03#
[self performSelector:@selector(updateStatus) withObject:nil afterDelay:1.0];
依赖于runloop
,并且background thread
的runloop
默认不打开。因此应该打开
runloop
或将该方法置于main thread
。lmvvr0a84#
你必须传入相应的对象来响应指定的选择器。传入
nil
会向nil发送一条消息,并且什么也不做。假设updateStatus
方法在你调用performSelector
的同一个类中声明,你可以这样做: