0

NSUserDefaultsを管理し、standardUserDefaultsの設定に従ってSQL選択をフィルタリングするメソッドの記述に固執しました。

私のアプリは6つの大陸を示しており、ユーザーはそれらのいくつかを無効にするオプションがあります。私のSQLメソッドでは、現在、次のように管理しようとしています。

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

ユーザーがヨーロッパのみを無効にすると機能しますが、さらに多くの大陸を無効にするとどうなりますか...したがって、どの大陸が無効になっているかをチェックしてそれらを省略するコードを作成する方法がわかりません。

当然のことながら、if(![[NSUserDefaults standardUserDefaults] boolForKey:@ "europe"] && .... && ......)のように多くの「if」を書き込むオプションがありますが、誰かがそうしてくれると非常にありがたいです。そのようなメソッドをよりスマートでエレガントな方法で実装する方法を教えてください。前もって感謝します。

4

2 に答える 2

1

別のアプローチ:sqliteはwhere句のINを認識しているため、「1、4、5」などのコンティネットIDを使用して文字列を設定すると、ステートメントが生成されます。

sql = [NSString stringWithFormat:@"... WHERE cont.continetID NOT IN (%@)", string];
于 2012-05-01T18:23:55.230 に答える
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];
于 2012-05-01T17:59:42.623 に答える