我在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];
});
}
});
答案 0 :(得分:0)
请勿将警报的委托设置为self
。将其设置为nil
。
使用self
时遇到的问题是,在点击按钮后,委托会尝试联系其委托,但由于您取消了视图控制器,因此self
不再有效。