Core graphics NSSavePanel、CGImageDestinationFinalize和OS X沙盒

Core graphics NSSavePanel、CGImageDestinationFinalize和OS X沙盒,core-graphics,osx-lion,sandbox,nssavepanel,Core Graphics,Osx Lion,Sandbox,Nssavepanel,我正在使用NSSavePanel让用户在我的应用程序中选择要保存到的图像。在我启用应用程序沙箱和授权之前,一切都正常。选择已存在的文件时会出现问题。我的代码如下: //创建指向文件目的地的URL和要保存到的CGImageDestination。 CGImageDestinationRef imageDestination=CGImageDestinationCreateWithURL((CFURLRef)[savePanel URL],(CFStringRef)newUTType,1,NULL)

我正在使用NSSavePanel让用户在我的应用程序中选择要保存到的图像。在我启用应用程序沙箱和授权之前,一切都正常。选择已存在的文件时会出现问题。我的代码如下:

//创建指向文件目的地的URL和要保存到的CGImageDestination。 CGImageDestinationRef imageDestination=CGImageDestinationCreateWithURL((CFURLRef)[savePanel URL],(CFStringRef)newUTType,1,NULL); CGImageDestinationAddImage(imageDestination,cgimage,(CFDictionaryRef)元数据); const bool result=CGImageDestinationFinalize(imageDestination)


它在选择新文件保存图像时工作,但当我选择现有文件时,它会在现有文件之外创建奇怪的命名文件,并且无法覆盖目标url的内容。更糟糕的是,我没有得到任何错误的回报,也无法检测到失败。这是CoreGraphics中的错误还是我的代码中的错误?这个问题有解决方法吗?

最后,我发现了一些核心图形调用组合,它们可以覆盖沙盒环境中已经存在的图像:
CGDataConsumerCreateWithURL
,然后是
cgmagedestinationcreatewithdataconsumer
。因此,
CGImageDestinationCreateWithURL
似乎已被破坏(至少在
OSX10.7.1
中)启用沙盒。

最后,我发现了覆盖沙盒环境中已存在图像的核心图形调用组合:
CGDataConsumerCreateWithURL
,然后是
cgmagedestinationcreatewithdataconsumer
。因此,在启用沙箱的情况下,
CGImageDestinationCreateWithURL
似乎被破坏(至少在
OSX Lion 10.7.1
)。

如果启用应用程序沙箱和权限,我会得到苹果提供的示例MassiveImage)的相同结果。我使用的唯一权限是com.apple.security.files.user-selected.read-write。我还知道,在沙盒应用程序中,以某种方式覆盖现有文件是可能的(标准应用程序“预览”是沙盒的,覆盖现有图像很好)。如果启用应用程序沙盒和授权,我会得到与苹果提供的示例MassiveImage相同的结果。我使用的唯一权限是com.apple.security.files.user-selected.read-write。我还知道,在沙盒应用程序中,以某种方式覆盖现有文件是可能的(标准应用程序“预览”是沙盒的,可以覆盖现有图像)。