Ho qualche codice nella mia applicazione che sembra qualcosa di simile:Perché Cocoa restituisce occasionalmente una stringa vuota?
char *hash = (char*) sqlite3_column_text(get_bookmark, 0);
NSString* postHash = [NSString stringWithUTF8String:hash];
Questo funziona per me ogni volta; Non l'ho mai visto non lavoro. La maggior parte dei miei utenti non ha problemi (per quanto ne so). Tuttavia, trovo che postHash
sia una stringa vuota (@""
) per alcuni utenti un po 'di tempo.
Qualcuno può spiegare perché?
Alcuni più contesto/speculazione:
Questo sembra accadere solo su telefoni jailbroken. C'è qualcosa di diverso in loro? Capisco che di solito c'è meno memoria disponibile. Qualcos'altro che potrebbe contribuire qui?
postHash
viene utilizzato in una cella di tabella e talvolta viene visto per essere popolato correttamente, quindi sono ragionevolmente fiducioso che la chiamata di database dovrebbe lavoro. In effetti, se il database ha anche una stringa vuota è a causa di un pezzo di codice molto simile, quindi la domanda rimane.
hash
restituisce sicuramente con un valore non NULL. Se imposto un NULL qui, l'app si arresta in modo anomalo. Allo stesso modo, postHash
non è nil
in quanto ciò causerebbe anche il crash dell'applicazione (per lo stesso motivo).
Sto pensando che questo è probabilmente legato alla memoria. Se il metodo tenta di allocare troppa memoria prima che -didReceiveMemoryWarning
possa essere chiamato cosa succede? So che, ad un certo punto, Springboard espelle l'app. Ma è possibile che Cocoa restituisca qui una stringa nulla piuttosto che il valore atteso? Ho sentito di alcune relazioni che, per quanto posso dire, possono essere state causate solo da una stringa vuota presente dove doveva essere presente qualcosa di più lungo.
Qualsiasi altra speculazione, teorie o idee sono benvenute.
"Ma è possibile che Cocoa restituisca qui una stringa nulla anziché il valore previsto?" Una "stringa nulla" sarebbe NULL (la stringa C) o nulla (l'NSString).Una stringa vuota è del tutto diversa: è una stringa senza caratteri, mentre NULL/nil non è affatto una stringa. –
Questa non è la mia comprensione di cosa sia una "stringa nulla". Quando dico "stringa nulla" sopra intendo "stringa vuota", cioè, "" in Objective-C o "" in C. Un valore nil/NULL causa l'arresto anomalo dell'app. –
"Null" significa 0. Il carattere null è '\ 0'; cioè 0. Il puntatore nullo è 0. Non esiste una "stringa nulla" in C, perché se è nullo, non è una stringa; è solo 0. –