2012-03-31 28 views
3

我正在使用sqlite數據庫。 我從sqlite數據庫檢索文本數據到名爲myArray的NSMutableArray。 在那個myArray變量中,有一列名爲「info」的文本數據。 之後我找回數據到NSMutableArray裏,我想所有的文本數據轉換的從SQLite數據庫爲小寫。 我在searchBar的textDidChange事件中編寫了如下代碼。如何在iOS中將NSMutableArray對象的NSString數據轉換爲小寫字母?

NSInteger counter = 0; 
    for(NSString *nameMe in myArray) 
    { 
     NSRange r = [[nameMe lowercaseString] rangeOfString:[searchText lowercaseString]]; 

     if(r.location != NSNotFound) 
     { 
      if(r.location== 0) 
      { 
       [tableData addObject:nameMe]; 
      } 
     } 

     counter++; 
    } 

但是,在lowercaseString中發生錯誤。

此錯誤是

2012-03-31 16:28:18.217 SqliteTest[1812:f803] -[MyInfoClass lowercaseString]: unrecognized selector sent to instance 0x6da9210 
2012-03-31 16:28:18.276 SqliteTest[1812:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MyInfoClass lowercaseString]: unrecognized selector sent to instance 0x6da9210' 

我覺得編譯器不知道如何對象數據轉換爲小寫。 我該如何解決這個問題? 我可以將對象(NSString)數據轉換爲小寫。 如果可以,請讓我知道如何做到這一點。 感謝您的幫助。

+0

你肯定myArray的包含NSString對象?你是如何初始化myArray的?請添加它的定義,並明確地顯示在哪裏行1812 – giorashc 2012-03-31 10:28:44

+0

我相信myArray包含NSString對象。我在viewDidLoad中初始化事件類似的「self.myArray = [MyInfo的getInitialData];」 – 2012-03-31 10:33:37

+0

,我和搜索欄的搜索文本。它只與casesenstative匹配。如果我的數據庫中的數據是「蘋果」,我無法用蘋果搜索這些數據。所以我用大寫字母輸入了所有的字符。那是我的問題。請幫忙。 – 2012-03-31 10:35:48

回答

16

我覺得編譯器不知道如何對象數據轉換爲小寫。

問題是MyInfoClass類型的對象沒有方法-lowercaseString。你遍歷數組假設數組中的每個對象是NSString過,但是這顯然是不正確的 - 肯定有在myArray MyInfoClass的至少一個實例。所以,解決這個問題的一種方法是確保只向數組添加字符串。

這裏是做你正在做的事情上面一個短,更安全的方式:

NSArray *lowercaseArray = [myArray valueForKey:@"lowercaseString"]; 

NSArray的-valueForKey:將發送-valueForKey:消息您都提供對陣列中的每個對象的關鍵,並收集結果數組。更好的是,如果數組中的某個對象返回nil,則結果數組將包含該索引處的NSNull對象。當你使用數組時,你會想檢查那些NSNull的,但是你不會像你在代碼中那樣得到一個異常。

更新:從OP的評論,似乎將數組轉換爲小寫的原因是爲了使大小寫不敏感的搜索成爲可能。值得指出的是,有更好的方法來實現這一點。這裏有兩個:

  • 使用NSString的-caseInsensitiveCompare:方法比較字符串,如果你正在做自己的比較。

  • 如果您使用謂詞來搜索匹配項,請將字符串比較運算符(LIKE,CONTAINS等)與不區分大小寫的選項一起使用:@「SELF like [c]%@」。您可能還需要不符號的變音符號:@「SELF like [cd]%@」。

+0

謝謝你的回答。這是我想要的。再次感謝。 :) – 2012-03-31 14:52:41

相關問題