沙盒时NSSavePanel不工作? - OSX•目标C(NSSavePanel not w

2019-10-23 00:31发布

我在我的应用程序以下保存面板。 我最近尝试沙箱,但不幸的是沙盒保存时似乎并不奏效。

据我所知,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];
    }
} 

Answer 1:

当你在沙盒,你不能访问任何文件。 您的应用需要权限访问该文件。 所以,让你一个路径中的任何API 不可能工作。 这将是不可能的沙箱找出文件名是否从保存面板或不来了。

有新的API返回一个网址,而这些网址某种程度上具有访问内置了文件的权限。 您需要使用该网址; 如果您想以后使用它(退出并重新启动应用程序后),你必须跟团一起存储的URL。

这仅仅是原则,它是如何工作的,您需要咨询苹果的文档的详细信息。 问题不在于旧的API已被弃用,但问题是,它不会给你,其中包括沙箱权限一个特殊的URL。



文章来源: NSSavePanel not working when sandboxed? - OSX • Objective C