views:

31

answers:

1

Hi all,

I have setup an array full of words as objects. I am trying then trying to compare what the user enters in a uitextfield to an object in the array to see if they match.

I have captured a pointer to the uitextview in one of the delegate methods, however I cannot compare the text field contents to the object in the array. I assume that this is because one is a string and one is an array object ? Do I need to cast one of the variables somehow ?

Thanks

Martin

A: 

Assuming you want to test whether the user's input matches any member of your array, you should do something like this:

NSString *input = textField.text;
BOOL wordFound = NO;
for(NSString *candidate in self.possibleWordsArray) { 
    if( [input isEqual:candidate] ) {
        wordFound = YES;
        break;
    }
}
if(wordFound) {
    ...
}
else {
    ...
}

Notes:

  • We are comparing the input string against each member of the array in turn. This gives an explicit meaning to the idea of matching a string against an array.

  • When we find a matching string, we set the flag wordFound to YES and then stop searching (using the break statement). If no match is found, the wordFound flag remains at its original value of NO.

  • Always use isEqual to test equality between strings, never ==; the later will usually work, but then break occasionally. This is because == only tests whether the two pointers point to the same memory location, whereas you might have two copies of an identical string in different memory locations.

David M.
Hi David. Many thanks for your help. Before I read your answer I did this, which works if ([textField.text isEqualToString : keepName]) { Success = YES; [self shootTarget]; } else { [self gameFail]; } return YES;
Ohnomycoco