后退按钮和dispatch_async完成后UIAlertView崩溃

时间:2013-11-11 07:19:37

标签: ios uialertview

我在UINavigationController上嵌入了一个视图。 在这个视图上,我有一个前进到UITableViewController的按钮。 当我到达UINavigationcontroler上的UITableViewController时,我添加了一个上传文件的按钮。 文件上载操作在dispatch_async内执行。 当dispatch_async完成时,我添加一个带有消息完成的UIAlertView。 有一个问题,因为我从UINavigationController返回按钮并且dispatch_async没有完成,我的应用程序崩溃了。 我哪里做错了? 我的代码之后 谢谢, 蒙特拉

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];
        });
    }

});

1 个答案:

答案 0 :(得分:0)

请勿将警报的委托设置为self。将其设置为nil

使用self时遇到的问题是,在点击按钮后,委托会尝试联系其委托,但由于您取消了视图控制器,因此self不再有效。