如果数组为零,则无法执行其他操作

时间:2013-03-05 02:29:55

标签: objective-c

我创建了一个搜索地址簿中人员的方法,我希望将结果作为数组返回,如果有结果将其打印出来,则打印“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;
}

谢谢

4 个答案:

答案 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