1

我的应用程序中有以下保存面板。我最近尝试将其沙盒化,但不幸的是,沙盒化保存似乎不起作用。

我知道 beginSheetForDirectory 已贬值,所以可能这就是它不起作用的原因?我怎样才能让它与沙盒一起工作?

- (IBAction)saveButtonPressed:(id)sender
{
    NSSavePanel *sp = [NSSavePanel savePanel];
    [sp setRequiredFileType:@"jpg"];

    [sp beginSheetForDirectory:[NSString stringWithFormat:@"%@/Pictures", NSHomeDirectory()]
                      file:@"output.jpg" 
            modalForWindow:window
             modalDelegate:self 
            didEndSelector:@selector(didEndSaveSheet:returnCode:conextInfo:) 
               contextInfo:nil];
}



-(void)didEndSaveSheet:(NSSavePanel *)savePanel
        returnCode:(int)returnCode conextInfo:(void *)contextInfo
{
    if (returnCode == NSOKButton) 
    {
     self.baseFilename = [[savePanel filename] stringByDeletingPathExtension];
     tileHeight = [heightTextField intValue];
     tileWidth = [widthTextField intValue];

     [self performSelector:@selector(delayPresentSheet) withObject:nil afterDelay:0.1];
    }
} 
4

1 回答 1

1

当您被沙盒化时,您不能只访问任何文件。您的应用需要访问该文件的权限。因此,任何为您提供路径的 API不可能工作。沙盒不可能确定文件名是否来自保存面板。

有返回 URL 的新 API,这些 URL 以某种方式具有访问内置文件的权限。您需要使用该 URL;如果您想稍后使用它(在您退出并重新启动应用程序后),您必须将 URL 与任务一起存储。

这只是它的工作原理,您需要查阅Apple的文档以获取详细信息。问题不在于旧 API 已被弃用,问题在于它没有为您提供包含沙盒权限的特殊 URL。

于 2015-05-05T19:17:06.717 回答