从didFinishPickingMediaWithInfo调用performSegueWithIdentifier

时间:2012-11-23 13:20:34

标签: ios objective-c iphone ipad segue

我想以编程方式从segue方法调用imagePickerController:didFinishPickingMediaWithInfo:,但它不起作用。它不会崩溃,但不起作用。它什么都不做。正确调用prepareForSegue方法。

- (void) imagePickerController:(UIImagePickerController *)picker 
         didFinishPickingMediaWithInfo:(NSDictionary *)info {

   rutaFoto = [info valueForKey:UIImagePickerControllerMediaURL];
   [self dismissModalViewControllerAnimated:YES];
   [self performSegueWithIdentifier:@"aGaleria" sender:self];
}

segue链接2 UIViewControllers。 如果我从其他地方使用performSegueWithIdentifier来调用segue(例如来自推送UIButton方法),则可以正常工作。 有什么想法吗?

2 个答案:

答案 0 :(得分:3)

尝试使用dismissViewControllerAnimated:completion:并在完成块中调用performSegueWithIdentifier:sender:(dismissModalViewControllerAnimated:无论如何都要折旧,所以你不应该使用它。)

      [self dismissViewControllerAnimated:YES completion:^{
           [self performSegueWithIdentifier:@"aGaleria" sender:self]; 
      }];

答案 1 :(得分:-2)

我想知道这是否与已经处理当前ViewController中的更改的主线程有关,即didFinishPickingMediaWithInfo与触发它的原始ViewController之间的转换。

我会尝试两件事,第一件事就是当你打电话给aGaleria赛车时要拖延:

sleep(2.0);
[self performSegueWithIdentifier:@"aGaleria" sender:self];

第二个也是更好的选择是在完成PickMediaWithInfo之后从视图中执行segue。您可以在原始ViewController中设置一个新的NSNotificationCenter触发器,然后在didFinishPicking方法中延迟触发它: