我有一个地址簿类,在这个课程中我有一个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 *卡)
请帮我搞清楚这一点。 欢呼声
答案 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