dismissViewControllerAnimated completion在UIImagePickerController上没有调用completion。

8

这是我拥有的代码:

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


    [picker dismissViewControllerAnimated:YES completion:^(void){
        NSLog(@"Test");

    }];
}

它关闭了模态视图控制器,但没有调用完成参数。我做错了什么吗?
1个回答

16

完成处理程序用简单的^{填充,我以前从未见过你的语法...


[picker dismissViewControllerAnimated:YES completion:^{        NSLog(@"Test");    }];
我能想到的唯一可能解释是,您的图像选择器被其他方式关闭,并且您不是它的委托(因此您不会收到“didFinishPickingMediaWithInfo”消息)。另一个可能性是SDK在那个时候发生了错误。我从运行一个快速示例项目中知道,在两种语法模式下,完成块都按预期触发。

我之前加了void是因为按照你上面的代码还是不能运行。我又改回去了,但还是不行。 - Andrew
你是否使用了日志的正确侧面?最右边的按钮应该被选中。 - CodaFi
1
这个语法和问题中的语法是等价的。任何一个 ^void (void){ NSLog(@"Test"); }^(void){ NSLog(@"Test"); } 或者 ^{ NSLog(@"Test"); } 都会变成完全相同的 Block。也就是说,当没有指定时,Block 的返回类型和参数列表默认为 void - jscs
天啊,看起来我真的应该删除这个代码...但是我不能。除了新API可能有些问题之外,我无法解释为什么完成块不会触发。 - CodaFi
1
我可以确认,如果你在方法中尝试关闭的视图控制器已经被关闭,那么完成块将不会执行。 - Drew C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接