2012-03-31 8 views
3

나는 sqlite 데이터베이스로 작업하고있다. sqlite 데이터베이스에서 myArray라는 NSMutableArray로 텍스트 데이터를 검색합니다. myArray 변수에는 텍스트 데이터가있는 "info"라는 열이 있습니다. NSMutableArray로 데이터를 검색 한 후 sqlite 데이터베이스의 모든 텍스트 데이터를 소문자로 변환하고 싶습니다. searchBar의 textDidChange 이벤트에 다음 코드를 작성했습니다.NSMutableArray 객체의 NSString 데이터를 iOS에서 소문자로 변환하는 방법은 무엇입니까?

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

+0

myArray에 NSString 객체가 포함되어 있는지 확인하십시오. "Self.myArray = [myInfo getInitialData];"와 같은 ViewDidLoad 이벤트에서 초기화되었습니다. –

+0

과 searchBar의 텍스트로 검색합니다.그것은 단지 casesenstative와 일치합니다. 데이터베이스의 데이터가 "APPLE"이면 Apple에서 해당 데이터를 검색 할 수 없습니다. 그래서 모든 문자를 대문자로 타이핑했습니다. 제 문제입니다. 제발 도와주세요. –

답변

16

저는 컴파일러가 객체 데이터를 소문자로 변환하는 방법을 모른다고 생각합니다.

MyInfoClass 유형의 개체에는 -lowercaseString 메서드가 없습니다. 배열의 모든 객체가 NSString이라고 가정하면 배열을 반복하고 있지만 분명히 사실이 아닙니다. 적어도 하나의 MyInfoClass 인스턴스가 myArray에 있어야합니다. 따라서 문제를 해결하는 한 가지 방법은 배열에만 문자열을 추가하는 것입니다. 에 결과를

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

가있는 NSArray의 -valueForKey: 당신이 배열의 모든 객체에 제공 키로 -valueForKey: 메시지를 보낼 것이며, 수집 :

다음은 위에서 무슨 일을하는지 할 수있는 짧은, 안전한 방법 배열. 심지어 배열의 일부 객체가 nil을 반환하면 결과 배열에 해당 인덱스에 NSNull 객체가 포함됩니다. 배열을 사용할 때 해당 NSNull을 확인하려고하지만 코드 에서처럼 예외를 얻지는 않습니다.

업데이트 : OP의 의견에서 배열을 소문자로 변환하는 이유는 대/소문자를 구분하지 않는 검색을 가능하게하는 것입니다. 그것을 성취 할 수있는 더 좋은 방법이 있음을 지적하는 것이 가치가 있습니다. 여기에 두 가지이다 : 당신이 비교 자신을 수행하는 경우

  • 사용는 NSString의 -caseInsensitiveCompare: 방법은 문자열을 비교.

  • 일치 항목을 검색하기 위해 조건자를 사용하는 경우 대소 문자를 구분하지 않는 옵션 인 문자열 비교 연산자 (LIKE, CONTAINS 등)를 사용합니다. @ "SELF like [c] % @". 분음 기호에 구별되지 않는 옵션을 원할 수도 있습니다 : @ "SELF like [cd] % @".

+0

답장을 보내 주셔서 감사합니다. 그것은 내가 원하는 것입니다. 다시 한번 감사드립니다. :) –

관련 문제