我已经管理过NSUserDefaults,并且根据standardUserDefaults中的设置编写了过滤SQL select的方法。
我的应用程序显示了6个大陆,用户可以选择禁用其中一些。在我的SQL方法中,我目前正试图以这种方式管理它:
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"europe"])
{
sqlContinents="SELECT cont.continentID,cont.continentName,cont.continentImage\
FROM Continents as cont\
WHERE cont.continentID <> 1";
}
如果用户只禁用欧洲,它会起作用,但是如果他将禁用更多的大陆...那么我无法弄清楚如何编写代码来检查禁用哪些大陆并省略它们。
原因是可以选择写许多“ifs”之类的 if(![[NSUserDefaults standardUserDefaults] boolForKey:@“europe”]&amp;&amp; ....&amp;&amp; ......),但如果有人会告诉我如何实现这样的话,我将非常感激方法更智能,更优雅。提前谢谢。
答案 0 :(得分: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];
答案 1 :(得分:1)
另一种方法:sqlite知道where子句中的IN,因此可以设置一个带有continet ID的字符串,如“1,4,5”,从而产生一个语句
sql = [NSString stringWithFormat:@"... WHERE cont.continetID NOT IN (%@)", string];