2016-06-08 9 views
1

현재 작동중인 앱이 정상적으로 작동합니다. 라이브러리에서 사진을 선택하고 Firebase에 업로드 할 수 있습니다. 그러나 갑자기 사진 라이브러리에서 파일을 업로드 할 수 없습니다. 시뮬레이터에서 아무런 문제가 없습니다. 내 전화기에서만, 나는 그 오류를받을 것이다.파일을 가져올 수 없습니다. 오류 : 파일을 볼 수있는 권한이 없기 때문에 파일을 열 수 없습니다.

내가받은 오류가

Error Domain=NSCocoaErrorDomain Code=257 "The file “IMG_8982.JPG” couldn’t be opened because you don’t have permission to view it." 
UserInfo={NSURL=file:///var/mobile/Media/DCIM/138APPLE/IMG_8982.JPG, 
NSFilePath=/var/mobile/Media/DCIM/138APPLE/IMG_8982.JPG, 
NSUnderlyingError=0x12ed877f0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}} 

이것은 내가 모든 동안 그 일을 한 것처럼 이상한하지만 갑자기 오늘 작동이 중지됩니다.

내 코드는 다음과 같습니다.

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 

    // Clear data if picture is repicked 

    imageLocalURL = nil 
    imageData = nil 

    imageSelected = info[UIImagePickerControllerOriginalImage] as? UIImage 

    if info[UIImagePickerControllerReferenceURL] != nil { 

     // Image is selected from Photo Library 
     referenceURL = info[UIImagePickerControllerReferenceURL] as? NSURL 

    } else { 

     // Image is taken from camera 
     imageData = UIImageJPEGRepresentation(imageSelected!, 1.0) 

    } 

    transportImage.image = imageSelected 
    dismissViewControllerAnimated(true, completion: nil) 

} 


func saveDetails() { 

    if imageSelected != nil { 

      if referenceURL != nil { 

       // Image is from photo library 

       let assets = PHAsset.fetchAssetsWithALAssetURLs([referenceURL! as NSURL], options: nil) 
       let asset = assets.firstObject 
       let checkValidation = NSFileManager.defaultManager() 
       asset?.requestContentEditingInputWithOptions(nil, completionHandler: { (contentEditingInput, info) in 
        self.imageLocalURL = contentEditingInput?.fullSizeImageURL 

        // I did this to check if there is a local URL and if the file exist, but it returns false 
        print(self.imageLocalURL) 
        print(checkValidation.fileExistsAtPath("\(self.imageLocalURL)")) 

        self.uploadTask = storageRef.child(filePath).putFile(self.imageLocalURL!, metadata: nil) { (metadata, error) in 
         if let error = error { 
          print("Error uploading: \(error.description)") 
          return 

         } 
        } 

      } else if imageData != nil { 

       let imageLocalData = UIImageJPEGRepresentation(imageSelected!, 0.8) 
       let metadata = FIRStorageMetadata() 
       metadata.contentType = "image/jpeg" 
       uploadTask = storageRef.child(filePath).putData(imageLocalData!, metadata: metadata) { (metadata, error) in 
         if let error = error { 
          print("Error uploading: \(error)") 
          return 
         } 

       } 

       UIImageWriteToSavedPhotosAlbum(imageSelected!, nil, nil, nil) 

      } 

카메라에서 이미지를 가져 오는 경우에도 아무런 문제가 없습니다. 사진 라이브러리에서 이미지를 가져온 경우 해당 오류가 발생합니다.

나는 수색을 시도했는데 Option+Clean 빌드를 시도했다. 나는 Projects->derived data-> delete에 갔다 나는 컴파일러가 디폴트다는 것을 검사했다.

누구든지이 문제를 도와 줄 수 있습니까?

+0

휴대 전화에서 앱을 삭제하고 다시 설치 하시겠습니까? – random

+0

예. 했어요. 나는 내 전화에서 삭제, 나는 청소하고 다시 작성합니다. – Chris

답변

0

일단 didFinishPickingMediaWithInfo의 범위를 벗어나면 액세스가 거부됩니다.

URL을 유지하는 대신 이미지를 가져올 수 있습니까?

UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage]; 

편집 :

죄송합니다, 당신은 스위프트에 있었다 통지, 당신은 이미 이미지를 끌어 것을하지 않았다. 아직도, 나의 제안은 서있다. URL 대신 이미지를 유지하면 괜찮을 것입니다.

+0

괜찮 았기 때문에 URL 대신 이미지를 유지했습니다. 해결 방법이 될 것입니다. 그러나 아직도 내가 전에이 문제가 발생했을 때이 문제에 직면하고 있습니까? – Chris

+0

보안상의 문제라고 생각합니다. 내가 가진 프로젝트의 이미지 대신 URL을 유지하는 코드를 추가했는데 데이터에 액세스 할 수 없습니다. 따라서 반환 된 데이터를 사용하여 필요한 작업을 수행하는 데 필요한 대리자 메서드의 작은 창이있는 것 같습니다. 하지만 이전에는 효과가 있었지만 지금은 효과가 없었다면 정말 말할 수 없었습니다. – GhostBob

관련 문제