0

我正在使用代码来检查一个单词是否在我的数组中,如果是我希望它提交它并且我有它的代码。如果不是,我希望它弹出一个屏幕。现在这一切正常,唯一的事情是屏幕弹出 2 次,因为我的数组中有 2 个单词。这是更好地解释它的代码。

NSArray *searchContacts = [NSArray arrayWithObjects:
                           @"CADEAU",
                           @"KADERZ",nil];
NSString *myContact = labelsText.text;

for (NSString *contact in searchContacts) {
    if ([contact isEqualToString:myContact]) {

这就是我所说的,在这种情况下,CADEAU & KADERZ。当我将其中一个词放入 labelsText.text 时,它完全符合我的要求。但是对于 else 语句,如果标签 text.text 单词不是 CADEAU 或 KADERZ,它会弹出一个屏幕:

else {
 UIAlertView *alert = [[UIAlertView alloc]

这个屏幕现在会弹出 2 次,所以我必须按 2 次关闭,我将如何解决这个问题,只需要按一次关闭,而不是数组中有多少字?

4

4 回答 4

5

使用 an 会更有效NSSet,但即使您使用 an NSArray,您也可以简单地调用containsObject:而不是自己循环遍历集合。

if (![searchContacts containsObject:myContact]) {
   //show alert...
}
于 2012-05-10T22:00:26.240 回答
3

在显示警报break;的代码后面加上:

for (NSString *contact in searchContacts) {
    if ([contact isEqualToString:myContact]) {
        // do something
    } else { 
        // show screen
        break;
    }
}

这将“打破”循环。

于 2012-05-10T21:58:55.513 回答
0

在您的 UIAlertView 之后使用休息时间。

例如:

for (NSString *contact in searchContacts) {
        if ([contact isEqualToString:myContact]) {
            //do what you want to do      
        }
        else{
            UIAlertView *alert = [[UIAlertView alloc] init];
            [alert show];
            break; //leave for()
        }
    }

或者使用它:

searchContacts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    if ([contact isEqualToString:myContact]) {
        //do what you want to do      
    }
    else{
        UIAlertView *alert = [[UIAlertView alloc] init];
        [alert show];

        *stop = YES; //stop enumeration
    }
}
于 2012-05-10T22:03:25.427 回答
0

我想你想要这样的东西:

    BOOL contactFound = NO;
    for (NSString *contact in array)
    {
        if ([contact isEqualToString:myContact])
        {
            contactFound = YES;
            break;
        }
    }

    if (!contactFound)
        UIAlertView *alert = [[UIAlertView alloc]...
于 2012-05-10T22:04:17.850 回答