Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS:无法找到如何编写正确的方法_Ios_Cocoa Touch_Sqlite - Fatal编程技术网

iOS:无法找到如何编写正确的方法

iOS:无法找到如何编写正确的方法,ios,cocoa-touch,sqlite,Ios,Cocoa Touch,Sqlite,我已经管理了NSUserDefaults,并坚持编写根据standardUserDefaults中的设置过滤SQL选择的方法 我的应用程序显示了6个大洲,用户可以选择禁用其中的一些。在我的SQL方法中,我目前正试图以这种方式管理它: if (![[NSUserDefaults standardUserDefaults] boolForKey:@"europe"]) { sqlContinents="SELECT cont.continentID,cont.continen

我已经管理了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";           
    }
若用户只禁用欧洲,那个么它会起作用,但若他禁用更多的大陆呢。。。所以我不知道如何编写代码来检查哪些大陆被禁用并忽略它们

当然,有一个选项可以写很多像这样的如果
如果[[NSUserDefaults standardUserDefaults]boolforky:@europe]&&….&&….&….,但如果有人能告诉我如何以更智能、更优雅的方式实现这种方法,我将非常感激。提前感谢。

您可以创建一个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];

另一种方法:sqlite知道IN where子句,因此可以使用continet ID(如1、4、5)设置字符串,从而生成语句

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

问题是sqlite查询不是NSString。在prepare语句中使用[sql UTF8String]。