0

UINavigationController にビューが埋め込まれています。このビューには、UITableViewController に進むボタンがあります。UINavigationcontroler の UITableViewController に到着したら、ファイルをアップロードするためのボタンを追加します。ファイルのアップロード操作は、dispatch_async 内で実行されます。dispatch_async が完了したら、メッセージが完了した UIAlertView を追加します。UINavigationController からの戻るボタンと dispatch_async が完了していないため、アプリがクラッシュするという問題があります。私はどこで間違っていますか?私のコードの後、ありがとう、Vincenzo

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_async(queue, ^ {

    BOOL                    success;
    NSURL *                 url;
    NSString *fileNameUrl = [@"ftp://xxx.xxx.xxx.xxx/" stringByAppendingString:nameFile];
    url = [[NetworkManager sharedInstance]smartURLForString:fileNameUrl];
    success = (url != nil);

    if ( ! success) {
        NSLog(@"Invalid URL");
    } else {
        self.fileStream = [NSInputStream inputStreamWithData:dataAsset];
        assert(self.fileStream != nil);

        [self.fileStream open];
        self.networkStream = CFBridgingRelease(
                                               CFWriteStreamCreateWithFTPURL(NULL, (__bridge CFURLRef) url)
                                               );
        success = [self.networkStream setProperty:@"XXXX" forKey:(id)kCFStreamPropertyFTPUserName];
        success = [self.networkStream setProperty:@"YYYYYY" forKey:(id)kCFStreamPropertyFTPPassword];
        self.networkStream.delegate = self;
        [self.networkStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
        [self.networkStream open];
        [[NSRunLoop currentRunLoop]run];

        dispatch_async(dispatch_get_main_queue(), ^{
           UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"SUCCESS" message:@"Complete" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
            [alertView show];
        });
    }

});
4

1 に答える 1

0

アラートのデリゲートを に設定しないでくださいself。に設定しnilます。

使用する際の問題はself、ボタンがタップされた後にデリゲートがそのデリゲートに接続しようとするがself、View Controller を閉じたために無効になることです。

于 2013-11-11T07:25:09.473 に答える