Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何在不同的方法中执行同一类的方法调用?_Objective C - Fatal编程技术网

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

Objective c 如何在不同的方法中执行同一类的方法调用?,objective-c,Objective C,我有一个地址簿类,在这个类中我有一个searchName方法,现在我想添加一个removeName方法,可以从地址簿中删除这个名称(在我写它的时候,我觉得很清楚……只是分享) 无论如何,我想使用的是preformSelector:@selector(searchNames),但我在这一行遇到了错误。这是我的代码: //method to search address cards -(NSMutableArray *) searchName:(NSString *) someName{

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

请帮我弄清楚这件事。
干杯

您有一个名为
searchName

类I有一个searchName方法

但是您正在这里调用
searchName
,请将其更改为
searchName:

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

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

if ([self searchName:theName]) // do stuff
请注意,您没有将参数传递给searchCards:太多,并且您不应该像以前那样将其值与0进行比较(如果未找到任何内容,则该方法返回nil)

编辑:


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

为什么字符串对象要响应
-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


试一试


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


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

我不理解您的确切问题,请解释。如下所述,您需要使用
@selector(..)
将字符名转换为
选择器
。很抱歉,这是一个语法错误,但这不是问题。@AnoopVaidya@Nir当前位置请告诉我你到底有什么问题我也在想为什么我可以正常调用该方法…你知道为什么我不能吗?xcode不允许@Marcelo FabriTry在self上调用该方法,而不是在name上。我编辑了我的答案以反映这一点。仍然不起作用。我尝试了你的代码,也许我需要更改一些主要内容@vikingosegundoim在此行获取线程1 SIGBRT:
for(AddressCards*card in book)
@VikingoSegUndom book从何而来?从这个类,它的nsmutablearray包含AddressCard类型的地址卡(另一个类)@VikingoSegUndom
-(BOOL) removeName:(NSString *)theName{
    NSArray *results = [self searchName:theName];
    if (results){
       [book removeObjectsInArray: results];
       return YES;
    }
    return NO;
}