2013-03-15 4 views
5

Quali sono le considerazioni speciali che devono essere prese in considerazione quando si converte una stringa di input dell'utente in un nome file valido su iOS? Ci sono metodi disponibili che possono aiutare? Non ho trovato nulla di ovvio su NSString o NSFileManager.Conversione della stringa di input dell'utente in un nome file valido

Il contesto consente agli utenti di salvare le ricerche all'interno dell'app. Dietro le quinte, questi nomi vengono convertiti nei nomi degli archivi persistenti di Core Data. I nomi file attuali non vengono mai esposti all'utente.

Grazie in anticipo.

+0

Se il file è solo per iOS, l'unico carattere non valido è la barra ('/'). – rmaddy

+0

@maddy 'nul' (' '\ 0'') è vietato anche. –

+0

@NikolaiRuhe Sì, lo è. Ma la domanda riguarda i caratteri che un utente può digitare nell'app. Non ho mai visto il carattere 'nul' sulla tastiera iOS. :) – rmaddy

risposta

3

La preoccupazione principale deve essere l'esperienza dell'utente: l'utente può digitare qualsiasi cosa per identificare il file. Tornando ai dati, si aspettava di vedere esattamente la stessa stringa digitata.

Il modo migliore per gestire queste informazioni è memorizzare l'input effettivo da qualche altra parte e utilizzare una mappatura per ottenere il file effettivo.

Si potrebbe semplicemente usare un dizionario salvato in un file plist. Il dizionario dovrebbe contenere l'input dell'utente come chiave e un UUID come valore. Il file viene quindi salvato utilizzando l'UUID come nome file. In questo modo sei sicuro che il nome del file è sempre valido e l'utente può digitare ciò che vuole senza timore di nomi di file non validi.

Un vantaggio rispetto alla semplice rimozione di caratteri non validi è che l'utente può utilizzare per esempio "/" e "//" come identificatori validi se ne ha voglia.

0

Sostituisci caratteri non validi. Qualcosa del genere:

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]; 

Verificare se il file esiste. Qualcosa del genere:

[[NSFileManager defaultManager] fileExistsAtPath:[fileURL absoluteString]] 
+3

Lo spazio bianco è consentito nei nomi dei file. Un utente non può digitare alcun carattere da 'illegalCharacterSet'. E molti simboli sono ammessi. – rmaddy

+3

La semplice rimozione di caratteri indesiderati comporta il pericolo di accedere involontariamente al file sbagliato. L'utente si aspetta che "foo ... bar" sia diverso da "foobar", ma nel codice identificano lo stesso file. –

1

Se si stanno salvando le ricerche, non è necessario disporre di file o nomi di file. Ci sono diversi modi per farlo, ma perché non usare solo i dati di base per salvare anche le ricerche? Potresti avere un'entità "Cerca" e memorizzare tutte le informazioni rilevanti lì.

Non c'è bisogno di file e ovviamente si sta già procedendo a velocizzare l'utilizzo dei dati di base, quindi basta usarlo anche qui.

+1

Perché limitare i nomi di file in lettere minuscole a-z? Che dire degli utenti che usano lingue che usano un alfabeto diverso (giapponese, russo, greco, ecc.)? Se il file rimane sul dispositivo, ci sono pochissimi simboli che l'utente può digitare che non dovrebbe far parte del nome file. – rmaddy

+0

Non intendevo solo lettere minuscole, ma dovrebbe essere qualsiasi cosa ritenga un carattere ragionevole per il nome del file.Modificherò, ovviamente non intendevo escludere le lettere maiuscole. Il punto era che personalmente non avrei permesso caratteri speciali se fossero validi o meno per i nomi dei file. – HackyStack

+1

È necessario spiegare il motivo per cui il nome del file deve essere limitato. Ho un'app che consente praticamente ogni carattere Unicode che un utente può digitare sulla tastiera iOS e quei file funzionano perfettamente. – rmaddy