2011-09-22 2 views
0

NSSavePanel을 사용하여 사용자가 내 앱에 저장할 이미지를 선택할 수있게했습니다. 앱 샌드 박싱 및 인 타이틀먼트를 사용할 때까지 모든 것이 잘 작동했습니다. 이 문제는 이미 존재하는 파일을 선택했을 때 발생합니다. 내 코드는 다음과 같습니다.NSSavePanel, CGImageDestinationFinalize 및 OS X 샌드 박스

// 파일 대상에 URL을 만들고 저장할 CGImageDestination을 만듭니다. CGImageDestinationRef imageDestination = CGImageDestinationCreateWithURL ((CFURLRef) [savePanel URL], (CFStringRef) newUTType, 1, NULL); CGImageDestinationAddImage (imageDestination, cgimage, (CFDictionaryRef) metaData); const bool result = CGImageDestinationFinalize (imageDestination);

이미지를 저장하기 위해 새 파일을 선택할 때 작동하지만 기존 파일을 선택하면 기존 파일 외에 이상한 이름의 파일이 만들어지고 대상 URL의 내용을 덮어 쓰지 못합니다. 그리고 더 나쁜 것은, 나는 그 어떤 대가도받지 못하고 그 실패를 발견 할 수 없다는 것입니다. 이것은 CoreGraphics의 버그입니까, 제 코드입니까? 이 문제에 대한 해결 방법이 있습니까?

+0

사과 샌드 박스 및 인 타이틀먼트를 사용하는 경우 사과 제공 예제 인 MassiveImage http://developer.apple.com/library/mac/#samplecode/MassiveImage/Introduction/Intro.html)에 대해 동일한 결과가 표시됩니다. 내가 사용하는 유일한 권한은 com.apple.security.files.user-selected.read-write입니다. 또한 어떻게 든 기존 파일을 덮어 쓰는 것이 샌드 박스 응용 프로그램에서 가능하다는 것을 알고 있습니다 (표준 응용 프로그램 '미리보기'는 샌드 박스 처리되고 기존 이미지를 잘 덮어 씁니다). –

답변

3

마지막으로 샌드 박스 환경에서 작업중인 기존 이미지를 덮어 쓸 코어 그래픽 호출을 발견했습니다 : CGDataConsumerCreateWithURL 다음에 CGImageDestinationCreateWithDataConsumer이옵니다. 따라서, CGImageDestinationCreateWithURL은 (적어도 OS X Lion 10.7.1에) 깨진 상태입니다.