2012-05-01 2 views
0

NSUserDefaults를 관리하고 standardUserDefaults의 설정에 따라 SQL을 필터링하는 방법을 작성했습니다.iOS : 적절한 방법을 작성하는 방법을 알 수 없습니다.

내 앱은 6 개 대륙을 표시하며 사용자는 일부를 사용 중지 할 수 있습니다. 그래서 내가 작성하는 방법을 알아낼 수 없습니다 ... 그는 더 대륙을 사용하지 않을 경우 사용자는 유럽,하지만를 사용하지 않을 경우

if (![[NSUserDefaults standardUserDefaults] boolForKey:@"europe"]) 
    { 
     sqlContinents="SELECT cont.continentID,cont.continentName,cont.continentImage\ 
     FROM Continents as cont\ 
     WHERE cont.continentID <> 1";   
    } 

그것은 작동합니다 : 내 SQL 방법에서 나는 현재 이런 식으로 관리하려고 어떤 대륙이 비활성화되어 있는지 확인하고 생략 할 코드. 원인의

는 경우 처럼 많은 "IFS"를 작성하는 옵션이있다 ([[NSUserDefaults standardUserDefaults] boolForKey : "유럽"@]! & & .... & & ...)하지만 누군가가 나에게 더 똑똑하고 우아한 방식으로 그러한 방법을 구현하는 방법을 보여 주면 매우 감사 할 것입니다. 미리 감사드립니다.

답변

1

SQL 문 앞에 모든 조건을 포함하는 WHERE 문자열을 만들 수 있습니다.

NSString where = @"WHERE"; 

if (![[NSUserDefaults standardUserDefaults] boolForKey:@"europe"]){ 
    where = [where stringByAppendingString: @" cont.continentID <> 1 "]; 
} 

// Rest of continents... 

sqlContinents = [@"SELECT cont.continentID,cont.continentName,cont.continentImage\ 
     FROM Continents as cont " stringByAppendingString: where]; 
+0

와우 결과 "1, 4, 5"와 같은 continet ID를 가진 캐릭터! 아주 간단합니다. 고맙습니다! – NCFUSN

1

또 다른 방법은 : sqlite가이 조항에 IN을 알고, 그래서 수 설치 성명

sql = [NSString stringWithFormat:@"... WHERE cont.continetID NOT IN (%@)", string]; 
+0

글쎄, 문제는 sqlite 쿼리가 NSString이 아니라는 것입니다. 챠일이야. – NCFUSN

+0

prepare 문에서 [sql UTF8String]을 사용하십시오. –

+0

정보를 제공해 주셔서 감사합니다. – NCFUSN

관련 문제