2017-02-23 25 views
1

샌드 박스 응용 프로그램이 있습니다. 사용자가 사진 앱에서 사진을 내 샌드 박스 앱으로 드래그 할 수있게하고 싶습니다. 사진과 샌드 박스 응용 프로그램 간 드래그 앤 드롭

은 내가하지 샌드 박스 응용 프로그램과 함께 사용시 사진에서 문제를 "약속 파일을"처리하지 모든 코드를 썼다. 그러나 내 샌드 박스 응용 프로그램을 사용하면 포토에서 대상 폴더에 그림 파일을 쓰는 것이 불가능하다는 것을 알게됩니다 ... 내 샌드 박스 응용 프로그램의 임시 폴더입니다. 사진도 임시 폴더에, 내 샌드 박스 내에서 쓸 수있는 종류의 논리적이다

. 하지만 내 앱이 샌드 박스 외부에 액세스 할 수 없기 때문에 사진에서 내 앱으로 파일을 교환하려면 어떻게해야합니까?

편집 요청에 따라 몇 가지 코드를 제공하기 위해

NSString *tempPath = [NSTemporaryDirectory() stringByAppendingPathComponent:[[NSUUID UUID] UUIDString]] ; 
NSError *error = nil ; 
[[NSFileManager defaultManager] createDirectoryAtPath:tempPath 
          withIntermediateDirectories:NO 
              attributes:nil 
               error:&error] ; 
filenames = [sender namesOfPromisedFilesDroppedAtDestination:[NSURL fileURLWithPath:tempPath]] ; 

(파일 이름은 전역 변수 NSArray를)

그리고 사진이 표시되어 오류 메시지 (죄송합니다, 그림이 프랑스어이지만, 메시지가 완전히 표시 될 수 없으므로 실제로 유용하지 않습니다. "0 개 파일 (1 개 중)이 내보내기되었습니다."이미지 "를"폴더 "로 옮길 수 없습니다 :이 폴더가 존재하지 않거나, 또는 // 폴더를자를 수 없습니다 //

물론 폴더가 있는지 확인했습니다.

enter image description here

좀 더 많은 정보를 편집

은 내가 한 조사 경로를 찾을 생각 : 나는 임시 폴더에 고유 폴더를 만들 때

  • , 그것은 도착을에 " 검역 "플래그. 터미널과 "ls -l"을 사용하여 권한을 확인한 후 "@"를 볼 수 있습니다. 이제는 고유 한 폴더를 만들지 않으면 사진이 파일을 임시 폴더에 직접 놓을 수 있습니다. 따라서 문제는 사진이 "격리 된"폴더를 사용할 수 없다는 것입니다.

  • 지금이 아직 도움이되지 않습니다. 어쨌든 드롭 그림 파일도 격리 플래그가 설정되어 있으므로 내 앱에서 읽을 수 없습니다!

나는 이러한 격리 플래그를 제거 할 수있는 방법을 찾지 못했습니다.

이상한 것은

난 그냥 디버거를 단계별로하면 모든 것이 잘 작동한다는 것입니다.

+0

임시 디렉토리를 가져 오는 방법을 코드로 게시 할 수 있습니까? –

+0

요청에 따라 코드가 추가되었습니다. –

답변

1

그래, 나는 틀린 것을 발견했다. 검역이나 샌드 박스 처리중인 앱과는 아무런 관련이 없습니다. namesOfPromisedFilesDroppedAtDestination이

사실

:라고는, (내 경우 사진에) 공급자 응용 프로그램은 임시 폴더에있는 파일을 쓰기 시작합니다. 시간이 좀 걸릴 수 있습니다. 따라서 대상 폴더의 이벤트를 모니터링하기 시작했고에만 에 반응했습니다. (이것을 확인하십시오 : How can my OS X app accept drag-and-drop of picture files from Photos.app?).

하지만

은 사진 응용 프로그램은 여러 단계로 파일을 전송한다. 첫 번째 단계는 나중에 "올바른"이미지 파일로 이름이 변경되는 임시 파일을 만듭니다. 임시 파일의 생성은 내 앱이 캡처 한 이벤트였습니다. 내 응용 프로그램은 현재 존재하는 이미지 파일을 검사하고 있었지만 아직 그렇지 않았습니다.

따라서 해결책은 약속 된 파일이 실제로있을 때까지 폴더 이벤트를 계속 확인하는 것입니다. 아직 완료되지 않은 경우 대기를 계속하십시오. 다행히 유망한 앱이 언젠가 약속을 지킬 수 있기를 바랍니다.

catlan 덕분에 나를 다시 조사하도록했습니다.

1

샌드 박스는 파일 약속 공급자 응용 프로그램은 문서 폴더에 쓸 수 있습니다.

[[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:NULL]; 
+0

감사합니다. 불행히도이 방법으로는 문제가 해결되지 않습니다. 약속 한 파일을 문서 폴더로 배달하는 사진을 볼 수 있습니다. 그러나이 사진에는 "격리"플래그가 설정되어 있습니다. 내 앱이 그것을 읽지 못하게하는 것 같습니다. 그게 내 질문의 마지막 편집에서 설명하려고 한 것입니다. 제 질문은 이제 "어떻게 격리 된 파일을 읽을 수 있습니까?"라고 생각합니다. –

+0

샘플 앱을 함께 넣고 github에 올려 놓을 수 있습니까? – catlan

+0

관심을 가져 주셔서 감사합니다. 네, 그렇게하려고 노력할 것입니다. 매우 짧은 시간에 (어쩌면 주말에). –