2013-03-15 101 views
5

在iOS上將用戶輸入字符串轉換爲有效文件名時需要考慮哪些特殊事項?有沒有可以幫助的方法? NSStringNSFileManager我找不到任何明顯的東西。將用戶輸入字符串轉換爲有效文件名

上下文允許用戶在應用程序中保存搜索。在幕後,這些名稱將轉換爲Core Data持久性存儲的名稱。實際的文件名不會暴露給用戶。

在此先感謝。

+0

如果該文件僅適用於iOS,則關於唯一無效的字符是斜線('/')。 – rmaddy 2013-03-15 15:05:59

+0

@maddy'nul'(''\ 0'')也被禁止。 – 2013-03-15 15:15:41

+0

@NikolaiRuhe是的。但問題是關於用戶可以在應用中輸入的字符。我從來沒有見過iOS鍵盤上的'nul'字符。 :) – rmaddy 2013-03-15 15:31:43

回答

3

主要關心的應該是用戶體驗:用戶可以輸入任何內容來識別文件。當回到數據時,她希望看到完全相同的字符串,她輸入英寸

處理這種信息的最佳方法是將實際輸入存儲在其他地方,並使用映射到實際文件。

您可以使用保存在plist文件中的字典。字典將包含用戶輸入作爲鍵和UUID作爲值。然後使用UUID作爲文件名保存該文件。通過這種方式,您可以確定文件名始終有效,並且用戶可以鍵入任何她想要的內容,而無需擔心無效的文件名。

與僅刪除無效字符相比,刪除無效字符的一個優點是,如果用戶喜歡,可以使用「/」和「//」作爲有效標識符。

0

替換非法字符。類似這樣的:

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]] 
+3

文件名中允許使用空格。用戶不能輸入來自'illegalCharacterSet'的任何字符。許多符號都是允許的。 – rmaddy 2013-03-15 15:01:05

+3

只是刪除不需要的字符承擔了無意中訪問錯誤文件的危險。用戶期望「foo ... bar」與「foobar」不同,然而在你的代碼中它們識別相同的文件。 – 2013-03-15 15:38:28

1

如果你只是保存搜索,你不應該需要文件或文件名。有幾種方法可以做到這一點,但爲什麼不使用核心數據來保存搜索呢?你可以有一個「搜索」實體並存儲所有相關信息。

不需要文件,而且您顯然已經快速使用核心數據,所以您也可以在這裏使用它。

+1

爲什麼將文件名限制爲小寫字母a-z?使用不同字母(日語,俄語,希臘語等)的語言的用戶如何?如果文件停留在設備上,那麼用戶可以輸入的符號很少,不應該是文件名的一部分。 – rmaddy 2013-03-15 15:03:21

+0

我的意思不僅僅是小寫,而應該是他認爲合理的文件名字符。我會編輯,我顯然不打算排除大寫字母。關鍵是,我個人不會允許特殊字符是否對文件名有效。 – HackyStack 2013-03-15 15:05:40

+1

您需要解釋爲什麼文件名應該受到如此限制的原因。我有一個應用程序,允許用戶在iOS鍵盤上輸入幾乎所有的Unicode字符,並且這些文件可以正常工作。 – rmaddy 2013-03-15 15:08:09

相關問題