0

我创建了一个在通讯录中搜索人的方法,我想将结果作为数组返回,如果有结果打印出来,否则打印“未找到”。

由于某种原因,如果数组不是 nil,我可以打印结果,但 else 不起作用......它甚至没有给我错误,这是代码:

主文件

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");

地址簿.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;
}

谢谢

4

4 回答 4

2

您的searchName:方法永远不会返回 nil。它有时会返回一个空数组,但这不是一回事。

你可能会做这样的事情searchName:

return [namsFound count]? namsFound : nil;

如果 namsFound 有 1 个或多个元素(换句话说,如果找到一些名称),这将返回 namsFound。否则,它将返回零。

于 2013-03-05T02:35:55.663 回答
0

如果你改变这个:

if (result != nil){

为此,它应该起作用:

if (result.count) {

你总是返回一个非零指针,因为你总是在搜索方法中分配/初始化数组。

于 2013-03-05T02:38:30.130 回答
0

而不是if (result != nil){,使用if (result.count > 0){

于 2013-03-05T02:38:53.413 回答
0

它不会打印"Not found",因为它永远不会打印nil。结果总是!= nil因为即使在没有找到搜索名称的情况下,它也会返回一个数组——一个未填充的数组,即一个元素为零的数组。if (result.count){是 IMO 最优雅的解决方案,因为0它相当于 boolean false,所以result.count返回的 a0将直接返回else

于 2013-03-05T02:51:34.947 回答