当文档是txt文件时保存文档的首选项

时间:2011-04-12 05:58:55

标签: cocoa macos

我想知道当这个文档只是一个简单的txt文件时,如何保存文档的首选项,如窗口大小,屏幕中的位置等。 (我的应用程序是文本编辑器)

我想到了NSUserDefaults并保存了文件路径,但是如果文件在应用程序关闭后移动会发生什么?使用NSUserDefaults真的是个好主意吗? 我正在寻求建议

由于

编辑: 我将这两个方法添加到MyDocument.m(感谢@somegeekintn @Black Frog)

//helper method that set NSWindow frame string in file system attributes
- (BOOL) _savePreferencesInFileAtURL:(NSURL *)absoluteURL{

    const char *path = [[absoluteURL path] fileSystemRepresentation];
    const char *name = [@"NSWindow frame" cStringUsingEncoding:NSUTF8StringEncoding];
    const char *frameCString = [NSStringFromRect([window frame]) cStringUsingEncoding:NSUTF8StringEncoding];

    int result = setxattr(path , name, frameCString, strlen(frameCString) + 1, 0, 0);
    return (result<0)? NO: YES;
}

//helper method that reads NSWindow frame string from file system attributes
- (BOOL) _readPreferencesInFileAtURL:(NSURL *)absoluteURL{

    const char *path = [[absoluteURL path] fileSystemRepresentation];
    const char *name = [@"NSWindow frame" cStringUsingEncoding:NSUTF8StringEncoding];
    char frameCString [50];

    ssize_t bytesRetrieved = getxattr(path, name, frameCString, 50, 0, 0); 
    //use frameCString...

    return (bytesRetrieved<0)? NO: YES; 
}

1 个答案:

答案 0 :(得分:4)

您可能需要查看setxattr和getxattr来分别编写和读取文件的扩展属性。你可以在这些属性中添加任何你喜欢的东西。

int setxattr(const char *path, const char *name, void *value, size_t size, u_int32_t position, int options);
ssize_t getxattr(const char *path, const char *name, void *value, size_t size, u_int32_t position, int options);

setxattr man page