我有一个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,无论用户是否联系都无关紧要。
答案 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)
{
.......
}