0

我正在开发一个必须完全离线工作然后同步到服务器的应用程序。

服务器可以(并且可能会)根据当前正在进行的项目进行更改。

我已经写了同步的东西,而且效果很好。一切都会以两种方式更新。

但是,设备的初始同步基本上是数千条记录的大信息转储,并且需要很长时间。我已经对此进行了分析和优化,但现在时间只是从同步的数据量以及这些数据之间的关系来看。

正常的同步(即发送和获取更新)从开始到结束只需要大约 5 秒,包括读取、上传、下载和写入。

有没有办法可以“插入”计算机并将数据库文件导入应用程序?

除了通过同步过程并在设备上下载和安装所有这些东西之外,还有其他方法吗?

我不能在构建时这样做,因为应用程序独立于它所在的项目,并且每个项目都有不同的数据集。

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 回答