Čo sa deje s nasledujúcim kódom?
-(IBAction)numFieldDoneEditing{
NSPredicate * regexTest = [NSPredicate predicateWithFormat: @"SELF MATCHES "^\d*\.\d{2}$""];
NSString *text = [[NSString alloc] initWithFormat: @"%@", numberField.text];
if ([regexTest evaluateWithObject: text] == YES) {
//do something
}
else{
//do something else
}
[text release];
[regexTest release];
}
odpovede:
3 pre odpoveď č. 1Z nejakého dôvodu musíte uniknúť spätným lomikom dvakrát pre d
sekvencia v špecifikácii regexu:
NSPredicate * regexTest = [NSPredicate predicateWithFormat: @"SELF MATCHES "^\\d*\.\\d{2}$""];
Niektoré ďalšie problémy s vaším kódom:
- Nemali by ste uvoľňovať
regexText
objekt, pretože nie ste vlastníkom. Nebolo vytvorené metódou s názvominit
alebocopy
, Pozrite si Sprievodca programovaním programovania pamäte pre kakao Je to viac problém štýlu, ale ak mátebooleovskú premennú, nedá to porovnať za rovnosť s ÁNO alebo NIE, jednoducho to robí kód ťažšie pochopiť.Tak len otestujte to alebo jeho inverzné priamo.Napríklad:
// Positive test: if([regexTest evaluateWithObject: text]) ; // do stuff // Negative test if(![regexTest evaluateWithObject: text]) ; // do stuff
3 pre odpoveď č. 2
Vzhľadom k tomu, ste označili toto s iphone akakao-dotyk, treba poznamenať, že NSPredicate nie je k dispozícii na iPhone. Stále bude fungovať v simulátore, pretože používa desktopové rámce, ale nebude fungovať na samotnom iPhone.