Ios 如何从didFinishPickingMediaWithInfo返回NSString或NSUrl?

Ios 如何从didFinishPickingMediaWithInfo返回NSString或NSUrl?,ios,objective-c,c,uiimagepickercontroller,Ios,Objective C,C,Uiimagepickercontroller,您好,我正在尝试在selectFile函数中实现UIImagePickerController。在中遵循了本教程,但下面的代码现在根据我的需要进行了一些调整 @implementation FileBrowser -(void)selectFile{ UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.allowsE

您好,我正在尝试在selectFile函数中实现UIImagePickerController。在中遵循了本教程,但下面的代码现在根据我的需要进行了一些调整

@implementation FileBrowser
-(void)selectFile{
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = NO;
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    [self presentViewController:picker animated:YES completion:NULL];
}

#pragma mark - Image Picker Controller delegate methods

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    NSURL *refURL = [info valueForKey:UIImagePickerControllerReferenceURL];
    NSString *myURL = [refURL absoluteString]; //not in tutorial, I'm trying to grab the url/path of the image here, with an intention of returning it to "callFileBrowser"

    [picker dismissViewControllerAnimated:YES completion:NULL];
}

@end
根据我的理解,当用户选择图像时,会调用imagePickerController函数。我的问题是如何取而代之的返回或获取url?我在同一个文件上有一个C函数,但在@implementation之外,这个函数调用我的selectFile,并且应该返回用户选择的url/路径

char* callFileBrowser(){
[fileBrowser selectFile];
//return myURL here;
}

我希望我能正确地解释一切。如有任何建议,将不胜感激。谢谢。

我认为用目前的设计是不可能的。调用callFileBrowser拾取图像,然后立即需要返回值。我们不知道用户何时完成挑选,我建议您在url准备好通知其他需要它的对象时,在didFinishPickingMediaWithInfo中发布通知

Miu,你有没有想过用ALAssets库来加载你的照片?它有指向文件的资产媒体URL,ALAssets是一个较低级别的库,但它允许您拥有自定义外观的照片选择器。我相信上次我在iPad上使用photo picker时,它需要纵向定位,如果你的应用程序只在横向模式下工作,这是一个问题。我没有想到这一点,我现在就研究一下。我真的只是想找到路。感谢您的建议,您也可以创建一个属性来将URL存储在viewController中。因此,我要做的是在didFinishPickingMediaWithInfo中创建通知。。也许可以将我的NSDictionary*信息传递给另一个函数,比如grabReadyURL,该函数将处理需要执行的操作?是的,没错,另一个函数将接收包含url的词典,然后您可以从那里处理。这取决于函数的位置,如果它在FileBrowser中,你可以直接调用它,如果它在另一个文件中,你也可以使用委托。我接受这个答案,因为它帮助我想到了实现我想要的东西的另一种方法。多谢夸夸其谈!