另一种做“初始同步”的方法

时间:2013-03-20 11:20:12

标签: ios objective-c synchronization

我正在开发一个必须完全脱机工作然后才能同步到服务器的应用。

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

我已经编写了同步内容,但效果非常好。一切都得到了更新。

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

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

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

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

我无法在构建时执行此操作,因为应用程序独立于其所在的项目,并且每个项目都有不同的数据集。

1 个答案:

答案 0 :(得分:0)

将sqlite数据库导入您的应用程序,并将其链接到应用程序委托中的核心数据堆栈中。这个海量数据应随应用程序一起提供,然后同步将对该初始数据集进行更改。

这是将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;
}