我创建了一个搜索地址簿中人员的方法,我希望将结果作为数组返回,如果有结果将其打印出来,则打印“Not found”。
由于某种原因我可以打印结果如果数组不是nil,但是else不能正常工作......它甚至不会给我错误,这就是代码:
的main.m
NSMutableArray *result = [[NSMutableArray alloc] init];
result = [myBook searchName:@"jack"];
if (result != nil){
for (AddressCards *nextCard in result)
NSLog(@"%@ %@", nextCard.name, nextCard.email);
}
else
NSLog(@"Not found");
AdressBook.m
-(NSMutableArray *) searchName:(NSString *) someName{
NSMutableArray *namsFound = [[NSMutableArray alloc] init];
for (AddressCards *addressCard in book){
if ([addressCard.name rangeOfString:someName options:NSCaseInsensitiveSearch].location != NSNotFound)
[namsFound addObject:addressCard];
}
return namsFound;
}
谢谢
答案 0 :(得分:2)
您的searchName:
方法永远不会返回nil。它有时会返回一个空数组,但这不是一回事。
您可以在searchName:
中执行以下操作:
return [namsFound count]? namsFound : nil;
这将返回namsFound iff namsFound有1个或更多元素(换句话说,如果找到某些名称)。否则,它将返回nil。
答案 1 :(得分:0)
如果你改变了这个:
if (result != nil){
对此,它应该有效:
if (result.count) {
你总是返回一个非零指针,因为你总是在搜索方法中分配/初始化数组。
答案 2 :(得分:0)
而不是if (result != nil){
,请使用if (result.count > 0){
答案 3 :(得分:0)
它不会打印"Not found"
,因为它永远不会nil
。结果总是!= nil
,因为即使在没有找到搜索名称的情况下,它也会返回一个数组 - 一个未填充的数组,即一个零元素的数组。 if (result.count){
是最优雅的解决方案IMO,因为0
等同于布尔false
,因此返回result.count
的{{1}}将直接转到0