1. 保存文本数据问题
Mac端的App,需要保存一些文本数据,尝试了几种方式,记录一下曲折。
- 保存到本 App 目录下,升级时可能会丢失数据。直接覆盖原App方式。无法测试升级方式,所以不是很确定。
- 保存到 Documents (文稿)目录下,可以保证升级问题,但是容易被用户删除或修改掉。
- 保存到 Application Support,必须要是完整的文件路径。
比如完整路径是 /Users/zzz/Library/Application Support
而不是 ~/Library/Application Support
最初是准备保存到 Application Support
文件夹中的,但刚开始取到的路径是 ~/Library/Application Support
这样的,结果就是无法创建文件夹,Console 提示 You don't have premission to save file in this folder
后来上网查询,几经曲折,才发现这个不是完整路径。
取得完整路径有以下方式,可能有更多,暂时只找到这三种。
- NSSearchPathForDirectoriesInDomains 最后一个参数,表示是否展开完整路径,传YES,得到的文件路径就是完整的。
NSArray *arr = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
- 用 stringByExpandingTildeInPath 方法来展开不完整路径,也可以得到完整路径。如果不确定得到的文件路径是否完整,可以用 stringByExpandingTildeInPath 这个方法再展开一次。
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];
}
网友评论