BOOL方法在if语句中不起作用

时间:2014-08-26 18:20:44

标签: ios objective-c

我有一个NSArray,用于存储我的联系人(字符串)。我还有一个名为checkList的方法,它查找现有联系人,如果用户不在联系人列表中,我会向当前用户提供警报视图,以便将其他用户添加到她的联系人列表中。问题是,当我点击按钮时,每次都会调用[self addContact],无论其他用户是否在联系人列表上都无关紧要。但是,只有当其他用户不在联系人列表中时才应调用[self addContact]

- (void) checkList {

    AppDelegate *contact = (AppDelegate*)[[UIApplication sharedApplication] delegate];

     BOOL isObjectThere = [contact.cArray containsObject: self.stringToCompare];

     NSLog(@" dev log %@", contact.cArray);

    if (!isObjectThere) {
         [self addContact];
    }

}

我知道每当用户点击checkList时我都会调用goButton方法,但是有一个if语句可以处理这种情况。我认为问题在于BOOL,因为我可以正确记录dev log,它不是一个零,它包含正确的内容。

- (IBAction) goButton {

[self checkList];

}

如果有人看到我的错误或有任何建议,那么听到它会很神奇。

当我记录BOOL时,它总是返回0,所以每次都是false,无论用户是否联系都无关紧要。

1 个答案:

答案 0 :(得分:0)

我很惊讶您使用containsObject。此方法比较指针类型而不是对象的值。我Sugere你使用年枚举功能

BOOL IsObjectThere = NO; 
[contact.cArray enumerateObjectsUsingBlock: ^ (NSString * obj, NSUInteger idx, BOOL * stop) {
     if ([obj isEqualToString: self.stringToCompare]) {
          isObjectThere = YES; 
         * stop = YES; // Stop enumerating 
     } 
     else {
         * stop = NO; // Continue enumerating 
     } 

}];

你也可以使用一个简单的循环:

BOOL IsObjectThere = NO; 
for (NSString* contactItem in contact.cArray)
{
     if ([obj isEqualToString: self.stringToCompare]) {
          isObjectThere = YES; 
          break;
     } 
}

最后我优先使用:

NSUInteger index = [contact.cArray indexOfObjectWithOptions:NSEnumerationConcurrent 
                                                passingTest:^(NSString* obj, NSUInteger idx, BOOL *stop) 
                    {
                        if ([obj isEqualToString: self.stringToCompare]) {
                            *stop = YES;
                            return YES;
                        }
                        return NO;
                    }];
if (index != NSNotFound) 
{
   .......
}