iOS:无法弄清楚如何编写正确的方法

时间:2012-05-01 17:46:12

标签: ios cocoa-touch sqlite

我已经管理过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; ......),但如果有人会告诉我如何实现这样的话,我将非常感激方法更智能,更优雅。提前谢谢。

2 个答案:

答案 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];