UIButton の有効化/無効化に問題があります。後でコードで再度有効にしないと、ボタンを無効にしても問題なく動作します。後で有効にすると、無効になっているように表示されますが (不透明度が変化します)、それを押すと、添付された IBAction 関数がまだ呼び出されます。
コード:
- (void)loadDataFromURL:(NSURL *)URL withLoadIndicator:(UIActivityIndicatorView *)loadIndicator errorName:(NSString *)name sender:(id)sender andCallback:(SEL)selector{
// Start loading indicator, block button so we will have only one call at a time
[loadIndicator startAnimating];
if ([sender isKindOfClass:[UIButton class]]) {
UIButton *button = sender;
[button setEnabled:NO];
}
// Run the data load sequence
self.dispatchQueue = dispatch_queue_create("com.companyname.settingsqueue", 0);
dispatch_async(self.dispatchQueue, ^{
// Downloading JSON and using CoreData to put it into the sqlite database here
});
// After loading is complete stop animating and re-enable the button
dispatch_async(dispatchQueue, ^{
[loadIndicator stopAnimating];
if ([sender isKindOfClass:[UIButton class]]) {
UIButton *button = sender;
button.enabled = YES;
}
});
}
奇妙なことに、それは loadIndicator に対して完全に機能します。関数の送信者パラメーターから取得したボタンは存在します (null ではありません)。削除 button.enabled = YES;
しても、本来は無効のままです。非同期実行中にボタンがまだ有効になっていない状態で、非同期コードが実行された後に再度有効にする方法はありますか?
助けてくれてありがとう。