在iOS上將用戶輸入字符串轉換爲有效文件名時需要考慮哪些特殊事項?有沒有可以幫助的方法? NSString
或NSFileManager
我找不到任何明顯的東西。將用戶輸入字符串轉換爲有效文件名
上下文允許用戶在應用程序中保存搜索。在幕後,這些名稱將轉換爲Core Data持久性存儲的名稱。實際的文件名不會暴露給用戶。
在此先感謝。
在iOS上將用戶輸入字符串轉換爲有效文件名時需要考慮哪些特殊事項?有沒有可以幫助的方法? NSString
或NSFileManager
我找不到任何明顯的東西。將用戶輸入字符串轉換爲有效文件名
上下文允許用戶在應用程序中保存搜索。在幕後,這些名稱將轉換爲Core Data持久性存儲的名稱。實際的文件名不會暴露給用戶。
在此先感謝。
主要關心的應該是用戶體驗:用戶可以輸入任何內容來識別文件。當回到數據時,她希望看到完全相同的字符串,她輸入英寸
處理這種信息的最佳方法是將實際輸入存儲在其他地方,並使用映射到實際文件。
您可以使用保存在plist文件中的字典。字典將包含用戶輸入作爲鍵和UUID作爲值。然後使用UUID作爲文件名保存該文件。通過這種方式,您可以確定文件名始終有效,並且用戶可以鍵入任何她想要的內容,而無需擔心無效的文件名。
與僅刪除無效字符相比,刪除無效字符的一個優點是,如果用戶喜歡,可以使用「/」和「//」作爲有效標識符。
替換非法字符。類似這樣的:
filename = [[filename componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] componentsJoinedByString:@"" ];
filename = [[filename componentsSeparatedByCharactersInSet:[NSCharacterSet illegalCharacterSet]] componentsJoinedByString:@"" ];
filename = [[filename componentsSeparatedByCharactersInSet:[NSCharacterSet symbolCharacterSet]] componentsJoinedByString:@"" ];
fileURLString = [NSTemporaryDirectory() stringByAppendingPathComponent:filename];
fileURL = [NSURL URLWithString:fileURLString];
檢查文件是否存在。類似這樣的:
[[NSFileManager defaultManager] fileExistsAtPath:[fileURL absoluteString]]
文件名中允許使用空格。用戶不能輸入來自'illegalCharacterSet'的任何字符。許多符號都是允許的。 – rmaddy 2013-03-15 15:01:05
只是刪除不需要的字符承擔了無意中訪問錯誤文件的危險。用戶期望「foo ... bar」與「foobar」不同,然而在你的代碼中它們識別相同的文件。 – 2013-03-15 15:38:28
如果你只是保存搜索,你不應該需要文件或文件名。有幾種方法可以做到這一點,但爲什麼不使用核心數據來保存搜索呢?你可以有一個「搜索」實體並存儲所有相關信息。
不需要文件,而且您顯然已經快速使用核心數據,所以您也可以在這裏使用它。
爲什麼將文件名限制爲小寫字母a-z?使用不同字母(日語,俄語,希臘語等)的語言的用戶如何?如果文件停留在設備上,那麼用戶可以輸入的符號很少,不應該是文件名的一部分。 – rmaddy 2013-03-15 15:03:21
我的意思不僅僅是小寫,而應該是他認爲合理的文件名字符。我會編輯,我顯然不打算排除大寫字母。關鍵是,我個人不會允許特殊字符是否對文件名有效。 – HackyStack 2013-03-15 15:05:40
您需要解釋爲什麼文件名應該受到如此限制的原因。我有一個應用程序,允許用戶在iOS鍵盤上輸入幾乎所有的Unicode字符,並且這些文件可以正常工作。 – rmaddy 2013-03-15 15:08:09
如果該文件僅適用於iOS,則關於唯一無效的字符是斜線('/')。 – rmaddy 2013-03-15 15:05:59
@maddy'nul'(''\ 0'')也被禁止。 – 2013-03-15 15:15:41
@NikolaiRuhe是的。但問題是關於用戶可以在應用中輸入的字符。我從來沒有見過iOS鍵盤上的'nul'字符。 :) – rmaddy 2013-03-15 15:31:43