イベントをTableViewController
トリガーするボタンがあり、[NSURLConnection sendAsynchronousRequest...]
performSegueWithIdentifier:sender:を介してモーダルセグエをロードします。これは小さなビューコントローラーを対象としています。このオーバーレイビューコントローラの目的は、読み込み中のグラフィックを表示し、データがを介して送信されている間のユーザーの操作を防ぐことNSURLConnection
です。
の完了ブロックで、 (バッチリストのみ)NSURLConnection
のデータを削除するメソッドを呼び出してから、オーバーレイビューコントローラーを呼び出します。TableViewController
dismissViewControllerAnimated:completion:
「警告:プレゼンテーションまたは却下の進行中にView Controllerを却下しようとしています!」という警告をデバッガーにスローするオーバーレイViewControllerを却下することを除いてすべてが機能します 。
このエラー、特にメソッドの使用に関するさまざまな質問と回答を見つけましperformSelector:object:withDelay
たが、これまでのところ何も機能していません。
これは、アプリの別の領域で同様のプロセスを使用しているため、特に厄介です。ただし、dismissViewControllerは、の選択から呼び出され、UITableViewCell
これは正常に機能します...
私のコードの関連する部分を以下に示します。
#import "ViewBatch.h"
@interface ViewBatch ()
@property (strong, nonatomic) LoadingOverlayViewController *loadingOverlay;
@end
@implementation ViewBatch
@synthesize loadingOverlay;
....
- (IBAction)exportBatch:(id)sender
{
if ([productArray count] > 0) {
[self performSegueWithIdentifier:@"loadingSegue" sender:self];
[self processData];
}
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"loadingSegue"]) {
loadingOverlay = segue.destinationViewController;
}
}
- (void)processData
{
// Code to create a file and NSURLRequest...
// ....
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:urlRequest
queue:queue
completionHandler:^(NSURLResponse *response, NSData *responseData, NSError *error) {
if ([responseData length] > 0 && error == nil)
{
// Not used for this request yet...
}
else if ([responseData length] == 0 && error == nil)
{
// Success...
[self didSendData];
}
else if (error != nil)
{
// Connection error...
NSLog(@"Error: %@", error);
}
}];
}
- (void)didSendData
{
// Reset the batch...
[productArray removeAllObjects];
[self.tableView reloadData];
[loadingOverlay dismissViewControllerAnimated:YES completion:NULL];
}
そして、ロードビューコントローラは次のとおりです。
#import <UIKit/UIKit.h>
@interface LoadingOverlayViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *statusLabel;
@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *activityIndicator;
@end
....
....
#import "LoadingOverlayViewController.h"
@interface LoadingOverlayViewController ()
@end
@implementation LoadingOverlayViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self.activityIndicator startAnimating];
}
@end