1. 保存文本數(shù)據(jù)問題
Mac端的App,需要保存一些文本數(shù)據(jù)溉卓,嘗試了幾種方式皮迟,記錄一下曲折。
- 保存到本 App 目錄下桑寨,升級(jí)時(shí)可能會(huì)丟失數(shù)據(jù)伏尼。直接覆蓋原App方式。無(wú)法測(cè)試升級(jí)方式尉尾,所以不是很確定爆阶。
- 保存到 Documents (文稿)目錄下,可以保證升級(jí)問題沙咏,但是容易被用戶刪除或修改掉辨图。
- 保存到 Application Support,必須要是完整的文件路徑肢藐。
比如完整路徑是 /Users/zzz/Library/Application Support
而不是 ~/Library/Application Support
最初是準(zhǔn)備保存到 Application Support
文件夾中的故河,但剛開始取到的路徑是 ~/Library/Application Support
這樣的,結(jié)果就是無(wú)法創(chuàng)建文件夾窖壕,Console 提示 You don't have premission to save file in this folder
后來(lái)上網(wǎng)查詢忧勿,幾經(jīng)曲折,才發(fā)現(xiàn)這個(gè)不是完整路徑瞻讽。
取得完整路徑有以下方式鸳吸,可能有更多,暫時(shí)只找到這三種速勇。
- NSSearchPathForDirectoriesInDomains 最后一個(gè)參數(shù)晌砾,表示是否展開完整路徑,傳YES烦磁,得到的文件路徑就是完整的养匈。
NSArray *arr = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
- 用 stringByExpandingTildeInPath 方法來(lái)展開不完整路徑,也可以得到完整路徑都伪。如果不確定得到的文件路徑是否完整呕乎,可以用 stringByExpandingTildeInPath 這個(gè)方法再展開一次。
NSArray *arr = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, NO);
if (arr && arr.count > 0) {
return [arr.firstObject stringByExpandingTildeInPath];
}
- NSFileManager 取到的路徑也是完整的
NSFileManager *fileMan = [NSFileManager defaultManager];
NSArray *urls = [fileMan URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask];
2. 保存 NSImage 到文件
- (NSString *)saveImage:(NSImage *)image
{
[image lockFocus];
NSBitmapImageRep *bits = [[[NSBitmapImageRep alloc] initWithFocusedViewRect:NSMakeRect(0, 0, size.width, size.height)] autorelease];
[image unlockFocus];
NSDictionary *imageProps = [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:0.9] forKey:NSImageCompressionFactor];
NSData *imageData = [bits representationUsingType:NSJPEGFileType properties:imageProps];
[imageData writeToFile:appFile atomically:YES];
}