1

私はこのコードを持っています:

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

user_versionユーザーが iPhone Documents ディレクトリに持っているsqlite を確認できます。以前に SQLite DB をダウンロードしました。user_versionローカル SQLiteがサーバー上にある SQLite と同じ場合、ユーザーがアプリをロードするたびに知りたいですuser_version。異なる場合は、新しいバージョンをダウンロードします。

user_versionダウンロードする前に SQLite を確認するにはどうすればよいですか?

アップデート

私はこれについて考えてParse APIいました。アプリのいくつかの機能に を使用しているので、このシステムを使用することにしました:

  1. user_versionsqlite の値を Parse Webservicesに保存して、手動で更新しました。
  2. ダウンロードしたいDBを知るために、iPhoneの言語をローカライズしてチェックします(2つの言語で同じDBを持っています)
  3. アプリを初めて実行するかどうかを で確認しNSUserDefaultsます。
  4. 初めての場合は、言語をチェックしてから、サーバーから正しい DB をダウンロードします。
  5. 初めてアプリを実行しない場合は、Parse で現在の user_version を確認し、それをuser_versioniPhone のローカル sqlite データベースと比較します。値が大きい場合は、DB をダウンロードして更新します。

新しい問題:で user_version を確認するときParse、クエリFindObjectsInBackgroundWithBlock(非同期) を使用するため、user_version を確認する前にアプリが実行され、DB のダウンロードが行われます。どうすれば対処できますか?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];


            }

        }
    }];}
4

1 に答える 1