Ich habe einige Code in meiner Anwendung, die etwa wie folgt aussieht:Warum gibt Cocoa gelegentlich eine leere Zeichenfolge zurück?
char *hash = (char*) sqlite3_column_text(get_bookmark, 0);
NSString* postHash = [NSString stringWithUTF8String:hash];
für mich jedes Mal Dies funktioniert; Ich habe es nie nicht Arbeit gesehen. Die meisten meiner Benutzer haben keine Probleme (soweit ich weiß). Allerdings finde ich, dass postHash
eine leere Zeichenfolge (@""
) für einige Benutzer die Zeit ist.
Kann jemand erklären warum?
Einige mehr Kontext/Spekulation:
Dies scheint nur auf jailbroken Handys passieren. Gibt es etwas anderes an ihnen? Ich nehme an, dass normalerweise weniger Speicher verfügbar ist. Gibt es noch etwas, das hier etwas beitragen könnte?
postHash
wird in einer Tabellenzelle verwendet und wird gelegentlich korrekt ausgefüllt angezeigt, daher bin ich einigermaßen zuversichtlich, dass der Datenbankaufruf funktionieren sollte. In der Tat, wenn die Datenbank auch eine leere Zeichenfolge hat, liegt das an einem sehr ähnlichen Code, daher bleibt die Frage bestehen.
hash
wird sicherlich mit einem Nicht-Null-Wert zurückgegeben. Wenn ich hier einen NULL erzwinge, stürzt die App ab. Ebenso ist postHash
nicht nil
als das würde auch die App zum Absturz bringen (aus dem gleichen Grund).
Ich denke, dass dies möglicherweise Speicher verwandt ist. Wenn die Methode versucht, zu viel Speicher zuzuweisen, bevor -didReceiveMemoryWarning
aufgerufen werden kann, was passiert? Ich weiß, dass das Springboard irgendwann die App auswirft. Aber ist es möglich, dass Cocoa hier eine Null-Zeichenfolge anstelle des erwarteten Werts zurückgibt? Ich habe von einigen Berichten gehört, die, soweit ich das beurteilen kann, nur durch eine leere Saite verursacht worden sein können, wo etwas länger hätte sein sollen.
Alle anderen Spekulationen, Theorien oder Ideen willkommen.
"Aber ist es möglich, dass Cocoa hier eine Null-Zeichenfolge anstelle des erwarteten Werts zurückgibt?" Eine "Null-Zeichenfolge" wäre entweder NULL (die C-Zeichenfolge) oder Nil (die NSString).Eine leere Zeichenfolge ist völlig anders: Es ist eine Zeichenfolge ohne Zeichen, während NULL/NULL keine Zeichenfolge ist. –
Das ist nicht mein Verständnis davon, was eine "Null-Zeichenfolge" ist. Wenn ich "Nullzeichenfolge" oben sage, meine ich "leere Zeichenfolge", d. H. @ "" In Objective-C oder "" in C. Ein Null/Null-Wert bewirkt, dass die App abstürzt. –
"Null" bedeutet 0. Das Nullzeichen ist '\ 0'; h., 0. Der Nullzeiger ist 0. In C gibt es keine "Null-Zeichenkette", denn wenn sie Null ist, ist sie keine Zeichenkette; es ist nur 0. –