0

私は、完全にオフラインで動作し、サーバーに同期する必要があるアプリに取り組んでいます。

サーバーは、現在進行中のプロジェクトに応じて変更される可能性があります (おそらく変更される予定です)。

私は同期のものを書きましたが、それは本当にうまくいきます。すべてが双方向で更新されます。

ただし、デバイスの最初の同期は、基本的に何千ものレコードの大きな情報ダンプであり、非常に長い時間がかかります。これを分析して最適化しましたが、時間は同期されている膨大な量のデータとそのデータ間の関係からのものです.

通常の同期 (つまり、更新の送信と取得) は、読み取り、アップロード、ダウンロード、書き込みを含め、開始から終了まで約 5 秒しかかかりません。

コンピューターに「プラグイン」して、DB ファイルをアプリにインポートする方法はありますか?

同期プロセスを経て、これらすべてのものをデバイスにダウンロードしてインストールする以外に、これを行う方法はありますか?

アプリはどのプロジェクトに依存しておらず、各プロジェクトには異なるデータ セットがあるため、ビルド時には実行できません。

4

1 に答える 1

0

sqlite db をアプリにインポートし、アプリ デリゲートのコアデータ スタックにリンクします。この膨大な量のデータは、アプリに同梱されている必要があり、同期によって最初のデータセットが変更されます。

これは、sqliteをコアデータスタックにリンクする方法です

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (_persistentStoreCoordinator != nil) {
        return _persistentStoreCoordinator;
    }

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"MyAppName.sqlite"];

    //Connects to sqlite---------------------------------------
    NSFileManager *fileManager = [NSFileManager defaultManager];

    // If the expected store doesn't exist, copy the default store.
    if (![fileManager fileExistsAtPath:[storeURL path]]) {
        NSURL *defaultStoreURL = [[NSBundle mainBundle] URLForResource:@"MyAppName" withExtension:@"sqlite"];
        if (defaultStoreURL) {
            [fileManager copyItemAtURL:defaultStoreURL toURL:storeURL error:NULL];
        }
    }
    //end sqlite connection ---------------------------------------

    NSError *error = nil;
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    return _persistentStoreCoordinator;
}
于 2013-03-20T14:37:56.623 に答える