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";           
    }

如果用户仅禁用欧洲,它将起作用,但如果他将禁用更多大陆怎么办......所以我无法弄清楚如何编写代码来检查哪些大陆被禁用并省略它们。

当然,可以选择编写许多“ifs”,例如 if(![[NSUserDefaults standardUserDefaults] boolForKey:@"europe"] && ....&&......),但如果有人愿意,我将不胜感激向我展示如何以更智能和优雅的方式实现这种方法。先感谢您。

4

2 回答 2

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];
于 2012-05-01T17:59:42.623 回答
1

另一种方法:sqlite 知道 where 子句中的 IN,因此可以设置一个带有诸如 "1, 4, 5" 之类的 continet ID 的字符串,从而生成一个语句

sql = [NSString stringWithFormat:@"... WHERE cont.continetID NOT IN (%@)", string];
于 2012-05-01T18:23:55.230 回答