2013-03-05 88 views
0

我有一個地址簿類,在這個類中,我有一個searchName方法,現在我想添加一個removeName方法,將從地址簿中刪除名稱(當我寫它時,我認爲它很清晰..只是分享) 。如何用不同的方法執行同一類的方法調用?

不管怎麼說,我雖然是用preformSelector:@selector(searchNames)但即時得到錯誤在這line..this是我的代碼:

//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"); 

IM剛開g線索1 SIGBRT在這一行上:for(AddressCards * card in book)

請幫我解釋一下。 歡呼

+0

我不理解你的確切問題,請解釋一下。 – 2013-03-05 12:13:37

+0

如下所述,您需要使用'@selector(..)'將字符名稱轉換爲'selector'。 – 2013-03-05 12:28:10

回答

2

爲什麼字符串對象應對-searchName:?用自己的名字來稱呼它作爲參數。這裏似乎沒有-performSelector:的reasone。你也想檢查數組的數量,而不僅僅是純粹的存在。

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

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

OK,我對搜索的名字再看一看。如果數組爲空,則返回nil。所以你不需要撥打-count


嘗試

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

仍然沒有工作..我試過你的代碼,也許我需要改變主要的東西? @vikingosegundo – MNY 2013-03-05 12:24:04

+0

你會如此友善地告訴我們,什麼不工作意味着什麼? – vikingosegundo 2013-03-05 12:24:54

+0

即時通訊線1 SIGBRT在這一行:'for(AddressCards * card in book)'@vikingosegundo – MNY 2013-03-05 12:25:56

0

您有一個名爲searchName

類我有一個searchName方法,

,但你在這裏呼籲searchNames方法,將其更改爲searchName:

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

對不起,這是一個語法錯誤,但它不是prob .. @ Anoop Vaidya – MNY 2013-03-05 12:14:02

+0

@Nir:請告訴你什麼是確切的問題 – 2013-03-05 12:19:14

0

這因爲performSelector沒有任何返回值。你爲什麼不能正常地調用這個方法?

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

請注意,你不及格參數去searchCards:太強了,你不應該比它的值改爲0喜歡你(該方法返回nil,如果沒有被發現)。

編輯:

你需要調用自己的方法,而不是theName。

+0

我也想弄清楚爲什麼我可以正常調用方法...你有任何想法,爲什麼我不能? xcode不會讓我@Marcelo Fabri – MNY 2013-03-05 12:17:16

+1

嘗試調用自己的方法,而不是在名稱上。我編輯我的答案以反映這一點。 – 2013-03-05 12:19:20

0

你應該使用preformSelector:@selector(searchNames :)作爲您有在該方法的一個參數

,如果你想從比其他該函數返回值對象,你可以使用NSInvocation

相關問題