2015-05-05 90 views
1

我的應用程序中有以下保存面板。我最近嘗試過沙盒,但不幸的是,當沙盒保存似乎沒有工作。沙盒時NSSavePanel不工作? - OSX•Objective C

我明白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]; 
    } 
} 

回答

1

當你被沙箱化時,你不能只訪問任何文件。您的應用程序需要訪問該文件的權限。因此,任何爲您提供路徑的API都不能可能的工作。沙箱不可能確定文件名是否來自保存面板。

有一些新的API返回一個URL,並且這些URL在某種程度上具有訪問內置文件的權限。您需要使用該網址;如果您稍後想要使用它(在您退出並重新啓動應用程序之後),您必須將URL與任務一起存儲。

這只是它的工作原理,您需要查閱Apple的文檔以獲取詳細信息。問題不在於舊的API已棄用,問題是它不會爲您提供包含沙盒權限的特殊URL。