0

我有一个地址簿类,在这个类中我有一个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 *card in book)

请帮我解决这个问题。干杯

4

4 回答 4

2

为什么字符串对象要响应-searchName:?在 self 上调用它,以字符串作为参数。似乎没有理由在-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;
}
于 2013-03-05T12:17:15.213 回答
0

你有一个名为的方法searchName

类我有一个 searchName 方法,

但你在searchNames这里打电话,把它改成searchName:

preformSelector:@selector(searchNames:)//one : as it takes one argument
于 2013-03-05T12:10:00.283 回答
0

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

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

请注意,您也没有将参数传递给 searchCards:,并且您不应该像以前那样将它的值与 0 进行比较(如果没有找到,该方法将返回 nil)。

编辑:

您需要在 self 上调用该方法,而不是在 theName 上。

于 2013-03-05T12:10:30.880 回答
0

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

如果您想从该函数而不是对象返回值,您可以使用 NSInvocation

于 2013-03-05T12:17:55.747 回答