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