2012-05-01 42 views
0

我已經管理NSUserDefaults,並堅持寫入方法來根據standardUserDefaults中的設置過濾SQL選擇。iOS:無法弄清楚如何編寫正確的方法

我的應用程序顯示6大洲,用戶可以選擇禁用其中的一些。在我的SQL方法我目前正在設法管理它這樣說:

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

它會工作,如果用戶將禁用僅限於歐洲,但如果他將禁用更多的大陸......所以我無法弄清楚如何寫代碼將檢查哪些大洲被禁用並省略它們。

原因有寫了許多 「如果」 像 如果一個選項([[NSUserDefaults的standardUserDefaults] boolForKey:@ 「歐洲」]!& & .... & & ......),但我如果有人會告訴我如何以更智能和更優雅的方式實施這種方法,我將非常感激。先謝謝你。

回答

1

您可以創建一個WHERE字符串來保存SQL語句之前的所有條件。

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

哇!很簡單。謝謝! – NCFUSN

1

另一種方法:源碼知道在where子句中的IN,所以能與設置標識continet一個字符串,如 「1,4,5」,從而在一份聲明中

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

那麼,問題是,SQLite查詢不是NSString。這是字符。 – NCFUSN

+0

在prepare語句中使用[sql UTF8String]。 –

+0

感謝您的信息 – NCFUSN