我的應用程序允許用戶重命名當前打開的文檔。這是微不足道的,並且工作正常,有一個非常煩人的錯誤,我無法弄清楚。當文件被重命名時,AppKit(友善地)在下次嘗試保存文檔時提醒用戶。用戶說「OK」,一切正常。當應用程序外部的某些內容改變了文檔時,這是有意義的,但當文檔本身實際上完成時則不行。防止當NSDocument文件(編程)重命名時出現警告
的代碼是這樣的:
-(void)renameDocumentTo:(NSString *)newName {
NSURL *newURL = [[[self fileURL] URLByDeletingLastPathComponent]
URLByAppendingPathComponent:newName];
NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager moveItemAtURL:[self fileURL] toURL:newURL];
NSDictionary *attrs = [fileManager attributesForItemAtPath:[newURL path] error:NULL];
[self setFileURL:newURL];
[self setFileModificationDate:[attrs fileModificationDate]];
}
有人會認爲,明確設置文檔上的新的URL和修改日期就足夠了,但遺憾的是事實並非如此。可可仍然會產生警告。
我試過改變順序(在文檔上設置新的URL,然後重命名文件),但這沒有幫助。
我也試過在CocoaDev對舊的文章在用戶提出了一個修正:
[self performSelector:@selector(_resetMoveAndRenameSensing)];
即使這不但是停止警告,我猜有有是使用記錄的API來完成此操作的正確方法。當用戶點擊項目樹上的文件並將其重命名爲其他內容時,Xcode如何處理這些事情。它不會警告用戶有關重命名,因爲用戶實際上執行了重命名。
如果任何人都可以闡明我可能需要做的事情,那很好,謝謝!
我已經開始賞金尋求幫助。不幸的是,我真的無處可去。一個簡單的測試用例就是創建一個打開一個.txt文件(或其他任何東西)的空白文檔應用程序,添加一個菜單項,其操作將打開的文件重命名爲其他內容(並使用新URL更新文檔對象)。我嘗試在重命名後第一次嘗試保存文件時規避警告。 – d11wtq 2010-12-07 11:27:19
哦,如果文檔正在編輯,這需要工作。如果存在未保存的更改,則保存到磁盤,關閉文檔,移動文件然後重新打開它可能會產生不良影響。 – d11wtq 2010-12-07 11:28:41