检查服务器上的sqlite user_version以更新iOS应用程序

时间:2013-08-24 17:13:19

标签: ios sqlite parse-platform

我有这段代码:

-(int)queryUserVersion: (sqlite3*) db {
    // get current database version of schema
    static sqlite3_stmt *stmt_version;


   if(sqlite3_prepare_v2(db, "PRAGMA user_version;", -1, &stmt_version, NULL) == SQLITE_OK) {
        while(sqlite3_step(stmt_version) == SQLITE_ROW) {
            databaseVersion = sqlite3_column_int(stmt_version, 0);
            NSLog(@"%s: version %d", __FUNCTION__, databaseVersion);
        }
        NSLog(@"%s: the databaseVersion is: %d", __FUNCTION__, databaseVersion);
    } else {
        NSLog(@"%s: ERROR Preparing: , %s", __FUNCTION__, sqlite3_errmsg(db) );
    }
    sqlite3_finalize(stmt_version);

    return databaseVersion;
}

我可以检查用户在iPhone Documents目录中的sqlite user_version。我之前下载过SQLite DB。我想知道每次用户加载应用程序时,如果本地SQLite user_version与我在服务器上的SQLite user_version相同,如果它们不同,则下载新版本。

如何在下载之前检查SQLite user_version

更新

我正在考虑这个问题,我正在使用Parse API来获取我应用中的某些功能,所以我决定使用这个系统:

  1. 我将user_version sqlite值存储在Parse Webservices上以手动更新它。
  2. 我查看本地化的iPhone语言,知道我想下载什么数据库(我有2种语言的数据库)
  3. 我使用NSUserDefaults检查是否是第一次运行APP。
  4. 如果是第一次检查语言,然后从我的服务器下载正确的数据库。
  5. 如果不是第一次运行应用程序,我将检查解析当前的user_version是什么,然后将其与iPhone上的本地user_version sqlite数据库进行比较。如果它具有更高的值,它将下载数据库以进行更新。
  6. 新问题:当我在Parse上检查user_version时,我使用查询FindObjectsInBackgroundWithBlock(assync),因此...它会在检查之前运行应用程序user_version并进行数据库下载。我该怎么处理?我已经尝试了NSTimer ..

    代码:

    -(void)checkUserVersion{
        PFQuery *query = [PFQuery queryWithClassName:@"sqliteversion"]; //1
        // NSNumber *n=databaseVersion;
        [query whereKey:@"user_version" equalTo:[NSNumber numberWithInt:[databaseVersion integerValue]]];//2
        [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {//4
            if (!error && [objects count]>0) {
    
                for (PFObject *object in objects) {
                    valor1=[[object objectForKey:@"Value"]intValue];
                    user_version=[NSNumber numberWithInt:valor1];
    
    
                }
    
            }
        }];}
    

1 个答案:

答案 0 :(得分:1)

听起来你在这里要做的就是为你的应用提供一组数据,并让你的应用检查一下它是否有新的数据发布。

我的建议是在sqlite数据文件中找到另一种方式,让你的应用程序用来查看服务器上是否有新数据。没有下载它就没有好的方法来查看该文件中的内容。更好的是在服务器上有一些东西,您的应用可以查询以确定是否需要下载新数据。

我建议做一些事情,比如在文件上使用时间戳。如果你这样做,你可能会利用NSURLCache为你处理一些逻辑。

祝你好运!