Mac OS開啟沙盒之后,文件的保存會涉及到一個權限問題。如下圖,在Capabilities中,可以勾選的權限一共有5種。
NSSavePanel
最近需要保存文檔到本地,因為不是Pictures、Music或者Movies,不能使用這幾個權限,因此使用NSSavePanel讓用戶自定義保存路徑。以下是代碼
1 NSSavePanel* panel = [NSSavePanel savePanel]; 2 [panel setNameFieldStringValue:@"Untitle.onecodego"]; 3 [panel setMessage:@"Choose the path to save the document"]; 4 [panel setAllowsOtherFileTypes:YES]; 5 [panel setAllowedFileTypes:@[@"onecodego"]]; 6 [panel setExtensionHidden:YES]; 7 [panel setCanCreateDirectories:YES]; 8 [panel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result){ 9 if (result == NSFileHandlingPanelOKButton) 10 { 11 NSString *path = [[panel URL] path]; 12 [@"onecodego" writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil]; 13 } 14 }];
-1 第2行代碼是設置默認的文件名
-2 第3行代碼是設置提示信息
-3 第5行代碼是設置允許的文件類型
-4 第6行代碼是隱藏擴展名
-5 第7行代碼是設置可以創建文件
-6 第8 - 14行代碼是運行窗口
-7 第9行代碼是判斷用戶點擊的是不是OK按鈕(默認title好像是Save)
-8 第11行代碼是取出用戶選擇保存的路徑
需要注意的是設置文件名的時候需要帶上擴展名(如示例中第2行),需要設置允許的文件類型(如示例中第5行),並設置隱藏擴展名(如示例中第6行)以及可創建文件(如示例中第7行)。設置這幾個屬性之后,運行示例代碼:
此時修改文檔名字(如修改為onecodego),選擇保存路徑為Documents,點擊save。
打開Finder,在Documents中就可以找到onecodego.onecodego。
需要注意的是這樣保存的文檔只能在當此打開的時候讀寫,也就是說當退出軟件或者重啟電腦對該路徑文件的讀寫權限就沒有了。
NSOpenPanel
使用NSOpenPanel打開用戶選擇的文件
1 NSOpenPanel *panel = [NSOpenPanel openPanel]; 2 [panel setDirectory:NSHomeDirectory()]; 3 [panel setAllowsMultipleSelection:NO]; 4 [panel setCanChooseDirectories:YES]; 5 [panel setCanChooseFiles:YES]; 6 [panel setAllowedFileTypes:@[@"onecodego"]]; 7 [panel setAllowsOtherFileTypes:YES]; 8 if ([panel runModal] == NSOKButton) { 9 NSString *path = [panel.URLs.firstObject path]; 10 //code 11 }
-1 第2行代碼是設置默認的路徑
-2 第3行代碼是設置不允許多選
-3 第4行代碼是設置可以打開文件夾
-4 第5行代碼是設置可以選中文件
-5 第6行代碼是設置可以打開的文件類型
-6 第8行代碼是判斷用戶選中的是不是OK按鈕
-7 第9行取出用戶選中的路徑
需要注意的是需要設置允許的文件類型,如示例允許的文件類型為onecodego,因此在NSOpenPanel中只能打開后綴為onecodego的文件,如下圖: