在我的应用程序中,我使用UIButton
(myButton),我通过Storyboard
添加了。
因此,点击按钮时会调用IBAction
:
-(IBAction)buttonAction:(UIButton*)sender{
[myCustomClass doSomeCrazyStuff];
[sender setEnabled:NO];
}
正如您所看到的,我正在从myCustomClass
调用方法(myCustomClass
是我的网络服务的REST客户端。)
该按钮所在的viewController
是myCustomClass
的委托
实现了两种委托方法,一种用于成功,另一种用于错误。
-(void)requestSucceeded{
/* If the request succeeded i want the button to be enabled again, and it's selected
state inverted */
NSLog(@"This gets called");
[myButton setEnabled:YES];
[myButton setSelected:!myButton.selected];
}
这完全没问题:按下按钮,在myCustomClass
上完成操作,请求成功,按钮设置为反转选择状态。
但现在对于其他委托方法:
-(void)requestFailed{
/* If the request failed i want the button to be enabled again, and it's selected
state stays the same */
NSLog(@"That gets called");
[myButton setEnabled:YES];
}
如果requestFailed
被调用,控制台会按预期打印被调用,但该按钮会被禁用...而且我不知道为什么。
我尝试了requestFailed
中的其他内容:
[myButton setHidden:YES];
只是为了查看对myButton
的引用是否有效...
它是。
我现在可能错过了一些东西,但我无法弄明白。
谢谢你的帮助。
修改
我不认为可以从不同的线程调用requestFailed
(如@ gonji-dev所提到的),因为requestSucceeded
和requestFailed
都是从同一方法调用的。
在我的doSomeCrazyStuff
方法中,我设置了一个处理连接成功和错误的完成块。如果发生错误,则会在另一个类中处理。如果连接成功,我要求HTTP状态代码来决定是否会调用requestFailed
或requestSucceeded
。
答案 0 :(得分:0)
与https://stackoverflow.com/a/31952060/218152类似的情况 你是否非常肯定你在调用:
[myButton setEnabled:YES];
在主线程上?
行业标准在操纵UI以响应通知或多线程环境时是:
dispatch_async(dispatch_get_main_queue(), ^{
// update UI
});