меня сложную операцию, а затем, когда работают полный,задержка IOS writeToURL или заморозить экран, как решить нить в случае
Это сэкономит NSData запись в файл для просмотра.
я сталкиваюсь с проблемой, когда я нажимаю кнопку,
кнопку Действие начнется шоу MBProgress вещи и асинхры в комплекс работает в фоновом режиме.
Когда файл записывается успешно, он перейдет к методу передачи метода prepareForSegue в destinationViewController.
Я пытаюсь добавить поток, но я обнаружил, что мой экран всегда зависает или не может записать файл успеха, чтобы этот экран отображал предупреждение (я думаю, что он работает не полностью, поэтому BOOL NO).
Как записать решение в этом случае для показа MBProgress, чтобы завершить операцию, а затем перейти к следующему диспетчеру просмотра?
спасибо.
Мой код ниже:
- (IBAction)fileBtnAction:(UIButton *)sender{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
[self doComplexOperateAction];
dispatch_async(dispatch_get_main_queue(), ^{
fileHud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
fileHud.label.text = @"file operating....";
fileHud.userInteractionEnabled = NO;
});
});
}
- (void) doComplexOperateAction{
....... do something.......
NSError *error;
writeFileSuccess = [resultFilie.fileContent writeToURL:previewFileUrl
options:NSDataWritingFileProtectionComplete
error:&error];
}
-(BOOL) shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender{
if([identifier isEqualToString:@"fileSuccessSegue"]){
if(writeFileSuccess == YES){
fileHud.hidden = YES;
fileHud = nil;
return YES;
}else{
dispatch_async(dispatch_get_main_queue(), ^{
msgAlertController.message = @"can't write file success";
[self presentViewController:msgAlertController animated:YES completion:nil];
fileHud.hidden = YES;
fileHud = nil;
});
return NO;
}
}
return NO;
}
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([[segue identifier] isEqualToString:@"fileSuccessSegue"]){
.........
NSURL *fileURL = [NSURL fileURLWithPath:fileTmpPathString];
fileSuccessViewController *pfVC = [segue destinationViewController];
pfVC.filePathURL = fileURL;
}
}
Мой код будет что-то работать и сохранять файл. когда файл сохранит успех, он перейдет к следующему uiviewcontroller. Поэтому я хочу подождать, когда файл будет сохранен, а затем код запустит метод подготовки к навигации по методу forforsegue. Но я не знаю, как подождать файл, чтобы сохранить полную навигацию к следующему диспетчеру просмотра. Спасибо . – dickfala
Отредактировал свой ответ. –
Спасибо, ответ. Я пытаюсь использовать dispatch_sync вместо dispatch_asaync для основного потока, но значение «writeFileSuccess» равно NO, а не ждать сохранения файла, а затем перейдите к пункту prepareforsegue. – dickfala