2012-05-01 7 views
0

私はNSUserDefaultsを管理し、standardUserDefaultsの設定に従ってSQL selectをフィルターするメソッドを書き留めました。iOS:適切なメソッドの書き方を理解できません

マイアプリには6つの大陸が表示され、一部の機能を無効にするオプションがあります。私は現在、このようにそれを管理しようとしている私のSQLの方法では:

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

ユーザーはヨーロッパだけを無効になります場合は動作しますが、彼はより多くの大陸を無効にするかどうか...私は書く方法何を把握することはできませんどの大陸が無効になっているかをチェックし、それらを省略するコード。原因

があれば のように多くの "IFS" を書き込むためのオプションがあります([[NSUserDefaults standardUserDefaults] boolForKey: "ヨーロッパ" @]!& & .... & & ......)が、Iそのような方法をよりスマートでエレガントな方法で実装する方法を誰かに教えてくれれば、非常に感謝しています。前もって感謝します。

答えて

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

関連する問題