如何在不同的方法中执行同一个类的方法调用?

时间:2013-03-05 12:06:05

标签: objective-c

我有一个地址簿类,在这个课程中我有一个searchName方法,现在我想添加一个removeName方法,它将从地址簿中删除名称(当我写它时我以为它非常清楚..只是分享)。

无论如何,我要使用preformSelector:@selector(searchNames),但我在这一行中得到错误..这是我的代码:

//method to search address cards
-(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];
        else if ([addressCard.email rangeOfString:someName options:NSCaseInsensitiveSearch].location != NSNotFound)
            [namsFound addObject:addressCard];
        else if ([addressCard.country rangeOfString:someName options:NSCaseInsensitiveSearch].location != NSNotFound)
            [namsFound addObject:addressCard];
        else if ([addressCard.workPlace rangeOfString:someName options:NSCaseInsensitiveSearch].location != NSNotFound)
            [namsFound addObject:addressCard];
    }

    return [namsFound count]? namsFound : nil;
}

我必须使用这个返回BOOL的方法声明:

-(BOOL) removeName:(NSString *)theName{

    if ([theName performSelector:@selector(searchName:)] > 0){
        for (AddressCards *card in book)
            [book removeObject:theName];
        return YES;
    }

        else
            return NO;
}

这就是我试图在main.m中测试它的方法:

AdressBook *myBook = [[AdressBook alloc] initWithName:@"Family Address Book"];

if([myBook removeName:@"nir"] == YES)
            [myBook list];
        else
            NSLog(@"Not in address book");

我在这一行获取线程1 SIGBRT:for(书中的AddressCards *卡)

请帮我搞清楚这一点。 欢呼声

4 个答案:

答案 0 :(得分:2)

为什么字符串对象会响应-searchName:?在自己上调用它,以字符串作为参数。这里-performSelector:似乎没有任何依据。您还想检查数组的计数,而不仅仅是纯粹的存在。

-(BOOL) removeName:(NSString *)theName{

    if ([self searchName:theName]){
        for (AddressCards *card in book)
            [book removeObject:theName];
        return YES;
    }
    return NO;
}

好的,我再看一下搜索名称。如果数组为空,则返回nil。所以你不需要拨打-count


-(BOOL) removeName:(NSString *)theName{
    NSArray *results = [self searchName:theName];
    if (results){
       [book removeObjectsInArray: results];
       return YES;
    }
    return NO;
}

答案 1 :(得分:0)

您有一个名为searchName

的方法
  

我有一个searchName方法,

但您在此处拨打searchNames,将其更改为searchName:

preformSelector:@selector(searchNames:)//one : as it takes one argument

答案 2 :(得分:0)

那是因为performSelector没有任何返回值。你为什么不能正常调用这个方法?

if ([self searchName:theName]) // do stuff

请注意,您没有将参数传递给searchCards:并且您不应该像现在这样将它的值与0进行比较(如果找不到任何内容,则该方法返回nil。)

编辑:

您需要在自己上调用方法,而不是在名称上调用。

答案 3 :(得分:0)

你应该使用preformSelector:@selector(searchNames :),因为你在该方法中有一个参数

如果你想要从object以外的函数返回值,你可以使用NSInvocation