2

NSSavePanel在我的应用程序中使用。在我的 OS X 10.7 上一切正常,但该应用程序被 Apple 拒绝,并附有以下评论:

第二次导出时,之前选择的保存位置不起作用。用户必须取消选择该位置,然后再次选择它才能写入文件。请确保您拥有必要的权利。

这篇评测是在运行 OS X 10.8 的 iMac 上进行的。

这是我的保存面板代码:

NSSavePanel *savePanel = [NSSavePanel savePanel];
[savePanel setAllowedFileTypes:[NSArray arrayWithObject:@"mov"]];
[savePanel setDirectoryURL:[NSURL URLWithString:@"/Documents"]];
[savePanel setNameFieldStringValue: videoName];

[savePanel beginSheetModalForWindow:window completionHandler:^(NSInteger result){
    if (result == NSFileHandlingPanelOKButton) {
        NSError *error = nil;
        NSString *sourceFilePath = [NSString stringWithFormat:@"%@/%@",[[NSBundle mainBundle] resourcePath], videoName];
        NSString *destFilePath = [[savePanel URL] path];
        NSFileManager *fileManager = [[NSFileManager alloc] init];
        if(![fileManager copyItemAtPath:sourceFilePath toPath:destFilePath error:&error])
            NSLog(@"%@", error);
    }
}];

目前我正在使用这些标志:

 <dict>
    <key>com.apple.security.app-sandbox</key>
    <true/>
    <key>com.apple.security.assets.movies.read-write</key>
    <true/>
    <key>com.apple.security.files.downloads.read-write</key>
    <true/>
    <key>com.apple.security.files.user-selected.read-write</key>
    <true/>
</dict>

我必须使用什么权利标志来解决此问题?

4

1 回答 1

1

如果您要在应用程序的同一运行中保存两次,则不需要任何权利;一旦用户从 中选择一个文件NSSavePanel,它就在您的应用程序的沙箱中。如果两次都显示保存面板,这同样适用——它应该“正常工作”。如果连续运行之间的位置相同,并且第二次没有保存面板,则需要将安全范围的书签存储到文件中。

例如,请参阅此问题中给出的示例代码(以及已接受答案中的更正):App Sandbox: document-scoped bookmark not resolve; 不返回任何错误

于 2012-09-23T02:10:55.177 回答