Objective c Can';如果数组为nil,则不执行else

Objective c Can';如果数组为nil,则不执行else,objective-c,Objective C,我创建了一个在通讯簿中搜索联系人的方法,我想将结果作为数组返回,如果有结果要打印出来,则打印“未找到” 出于某种原因,如果数组不是nil,我可以打印结果,但是else不起作用……它甚至没有给我eror,这是代码: main.m NSMutableArray *result = [[NSMutableArray alloc] init]; result = [myBook searchName:@"jack"]; if (result != nil){

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

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

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");
地址簿

-(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;
}

谢谢

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

您可以在
searchName:
中执行类似操作:

返回[namsFound count]?Namsfund:无

这将返回namsFound iff namsFound有1个或多个元素(换句话说,如果找到一些名称)。否则,如果您更改此项,它将返回nil.

if (result != nil){
为此,它应该发挥作用:

if (result.count) {

您总是返回一个非零指针,因为您总是在搜索方法中alloc/init数组。

如果(result!=nil){
,请使用
如果(result.count>0){
它不打印
“未找到”
因为它从来都不是
nil
。结果总是
!=nil
,因为即使在没有找到搜索名称的情况下,它也会返回一个数组-一个未填充的数组,即一个元素为零的数组。
如果(result.count){
是IMO中最优雅的解决方案,因为
0
相当于布尔值
false
,因此
结果。返回
0
的count
将直接转到
中,否则

NSPredicate将是一种更好的搜索方式。我认为这是最优雅的方式。完成此操作后,如果(result){…
在main.m中。