美文网首页
macOS App 保存数据

macOS App 保存数据

作者: 十月末的故事 | 来源:发表于2018-03-19 15:55 被阅读133次

    1. 保存文本数据问题

    Mac端的App,需要保存一些文本数据,尝试了几种方式,记录一下曲折。

    1. 保存到本 App 目录下,升级时可能会丢失数据。直接覆盖原App方式。无法测试升级方式,所以不是很确定。
    2. 保存到 Documents (文稿)目录下,可以保证升级问题,但是容易被用户删除或修改掉。
    3. 保存到 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 后来上网查询,几经曲折,才发现这个不是完整路径。

    取得完整路径有以下方式,可能有更多,暂时只找到这三种。

    1. NSSearchPathForDirectoriesInDomains 最后一个参数,表示是否展开完整路径,传YES,得到的文件路径就是完整的。
    NSArray *arr = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
    
    1. 用 stringByExpandingTildeInPath 方法来展开不完整路径,也可以得到完整路径。如果不确定得到的文件路径是否完整,可以用 stringByExpandingTildeInPath 这个方法再展开一次。
    NSArray *arr = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, NO);
    if (arr && arr.count > 0) {
        return [arr.firstObject stringByExpandingTildeInPath];
    } 
    
    1. 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];
    }
    

    相关文章

      网友评论

          本文标题:macOS App 保存数据

          本文链接:https://www.haomeiwen.com/subject/jvxjqftx.html