2012-05-01 44 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