2011-04-12 23 views
1

我想知道當這個文檔只是一個簡單的txt文件時,如何保存文檔的首選項,如窗口大小,在屏幕中的位置等。 (我的應用程序是一個文本編輯器)當它是一個txt文件時保存文檔的首選項

我想到NSUserDefaults並保存文件路徑,但如果稍後關閉應用程序時移動文件會發生什麼?使用NSUserDefaults真的是個好主意嗎? 我要找的建議

感謝

編輯: 我添加了這兩種方法MyDocument.m(感謝@somegeekintn @Black青蛙)

//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; 
} 

回答

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

+1

@ nacho4d,你會發現使用setxattr的例子,getxattr [這裏](http://www.cocoabuilder.com/archive/cocoa/299586-length-of-nswindow- stringwithsavedframe-result.html) – 2011-04-12 18:14:43

+0

感謝它的工作!我已經更新發布了我寫的代碼:) – nacho4d 2011-04-13 06:43:28

相關問題