2

カメラから画像を選択した後、このメソッドが呼び出されます。

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

[picker dismissModalViewControllerAnimated: YES];

//    cameraImage.image = [info objectForKey:
//                         UIImagePickerControllerOriginalImage];

NSLog(@"%@",info);

NSURL *url = [info valueForKey:UIImagePickerControllerReferenceURL];

NSLog(@"%@",url);
NSLog(@"%@",[info valueForKey:UIImagePickerControllerMediaURL]);
}

UIImagePickerControllerOriginalImage から画像を取得します。しかし、UIImagePickerControllerReferenceURL は nil を返します。何が間違っているのかわかりません。助けてください。

ありがとう

4

2 に答える 2

3

写真は実際に保存するまでファイル システムに存在しないため、参照 URL はありません。

MediaURL は映画にのみ使用されます。これは、圧縮されたバージョンのムービーの URL であり、一時フォルダーに保存され、アプリケーションからアクセスできます。

于 2013-06-07T01:29:48.370 に答える
0

選択した写真のファイル名を取得するのと同じ問題がありました。新しく撮影した写真の場合、NSURL が存在しないため UIImagePickerControllerReferenceURL は nil を返すため、デフォルトの名前を割り当てます。フォト フレームワークで導入された PHImageManager の助けを借りてファイル名を取得する referenceUrl が存在します。

    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    self.selectedIndex = 1
    var fileName = UIImage.defaultFileName()

    //Pic is comming from library so url exists
    if let referenceUrl = info[UIImagePickerControllerReferenceURL] as? NSURL, image = info[UIImagePickerControllerOriginalImage] as? UIImage  {
        if #available(iOS 8.0, *) {
            let phAsset = PHAsset.fetchAssetsWithALAssetURLs([referenceUrl], options: nil).lastObject as! PHAsset
            PHImageManager.defaultManager().requestImageDataForAsset(phAsset, options: PHImageRequestOptions(), resultHandler: { (imagedata, dataUTI, orientation, info) in
                if info!.keys.contains(NSString(string: "PHImageFileURLKey")) {
                    let path = info![NSString(string: "PHImageFileURLKey")] as! NSURL
                    fileName = path.lastPathComponent!
                }
                self.addDocumentDelegate?.tabBarControllerDidTakePicture(self, image: image, fileName: fileName)
                AppRoot.sharedInstance.dismissModalViewController(true, completion: nil)
            })
        } else {
            self.addDocumentDelegate?.tabBarControllerDidTakePicture(self, image: image, fileName: fileName)
            AppRoot.sharedInstance.dismissModalViewController(true, completion: nil)
        }
    } else if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { //Pic is comming from Camera so url does not exists
        self.addDocumentDelegate?.tabBarControllerDidTakePicture(self, image: image, fileName: fileName)
        AppRoot.sharedInstance.dismissModalViewController(true, completion: nil)
    }
}
于 2015-12-16T11:47:16.750 に答える