2010-08-11 9 views
5

Ich habe dieses seltsame Problem testen für leere (oder Null) Text-Eigenschaft. Hier ist mein Setup: Ich habe eine Ansicht mit 6 Textfeld in es und hier der Code verwende ich durch jene Feld zu gehen (in einem NSMutable Array geladen) ...UITextField: Test Text-Eigenschaft für leere Zeichenfolge oder Null oder Null funktioniert nicht

NSEnumerator *portsEnumerator = [appliancePorts objectEnumerator]; 
UITextField *tmpField; 
newSite.port = [NSMutableArray array]; 
while (tmpField =[portsEnumerator nextObject]) { 
    NSLog(@"value:%@",tmpField.text); 
    if (![tmpField.text isEqualToString:nil]) { 
     [newSite.port addObject:(NSString *)tmpField.text]; 
    } 
} 

Wenn ich in dieser Schnittstelle bin und geben sie Text in den beiden ersten Feld und „nur“ auf die Registerkarte remaning Feld und die Schaltfläche „Fertig“ ist hier, was ich von GDB Ausgang bekam:

2010-08-10 20:16:54.489 myApp[4883:207] value:Value 1 

2010-08-10 20:16:58.115 myApp[4883:207] value:Value 2 

2010-08-10 20:17:02.002 myApp[4883:207] value: 

2010-08-10 20:17:13.034 myApp[4883:207] value: 

2010-08-10 20:17:15.854 myApp[4883:207] value: 

2010-08-10 20:17:17.762 myApp[4883:207] value: 

ich weiß, dass, wenn ich für leere Zeichenfolge testen sollte es funktionieren weil die text -Eigenschaft beim Ablegen auf der Konsole zeigt dies:

UITextField: 0x5d552a0; frame = (20 8; 260 30); text = ''; clipsToBounds = YES; opaque = NO; tag = 1; layer = CALayer: 0x5d54f20 

Aber das WIRKLICHE Problem beginnt, wenn ich die Ansicht zurückgehe, einen Text in das gleiche erste Feld und den "Fertig" Knopf direkt danach einfüge (nicht durch das andere Feld gehend, so dass sie keinen Fokus bekommen). Dies ist wiederum der GDB Ausgang ...

2010-08-10 20:23:27.902 myApp[4914:207] value:Value 1 

2010-08-10 20:23:31.739 myApp[4914:207] value:Value 2 

2010-08-10 20:23:34.523 myApp[4914:207] value:(null) 

2010-08-10 20: 23: 56,443 myApp [4914: 207] * Beenden app aufgrund nicht abgefangene Ausnahme 'NSInvalidArgumentException', Grund: ‚* - [NSMutableArray insert: atIndex:]: Versuch Null Objekt auf 2'

Also, die offensichtlichen Probleme ist, dass zuerst die isEqualtoString:nil nicht und zweiten funktioniert, wie kommt diese Textänderung von ‚einfügen‘ zu null, nur um den Fokus auf das Feld zu legen.

Gibt es also einen besseren Weg, um ein leeres Feld zu testen?

Danke!

+0

wenn Sie UITextView verwenden, dann http://stackoverflow.com/a/8238742/1660139 – Haider

+0

wenn Sie UITextView verwenden, dann würde dieser Link helfen http://stackoverflow.com/a/8238742/1660139 – Haider

Antwort

21

Ich neige dazu,

if (![tmpField.text length]) 

Diese verwenden wird es, wenn es entweder Null verpassen oder @ „“. d. h., es findet die Länge der Zeichenkette, und wenn sie 0 ist (was der Fall wäre, wenn die Zeichenkette leer oder null wäre), führt sie den IF-Befehl nicht aus.

+0

+1 - viel besserer Weg – jrtc27

+0

Diese Arbeit, mit Ausnahme des Negierens am Anfang. Entfernen Sie es und es funktioniert für '' oder null Zeichenfolge. Vielen Dank!Aber ich frage mich immer noch, warum der Textwert von null auf ''? –

3

Wie wäre es

if (![tmpField.text isEqualToString:@""]) 
  • , die für einen leeren String-Tests, kein Null-String.

Es gibt viele andere Möglichkeiten, einschließlich der Länge der Zeichenfolge zu testen. Beachten Sie, dass Sie eine Nachricht ohne Probleme an ein nil-Objekt senden können. Wenn tmpField.text also null ist, würde der Test erfolgreich sein (und Sie würden beim Versuch, Ihrem Array ein nil-Objekt hinzuzufügen) abstürzen), aber der gewünschte Test ist Senden Sie eine Nachricht an das NSString-Objekt, und fragen Sie, ob es leer ist oder nicht.

+0

Diese Arbeit wird nur wenn das Feld den Fokus hat, weil es eine Zeichenfolge erhält. Aber wenn das Feld nicht den Fokus hat, dann haben Sie eine Null und dieser Test schlägt fehl. –

Verwandte Themen