2013-03-20 39 views
0

我正在研究一个必须完全脱机工作,然后同步到服务器的应用程序。执行“初始同步”的另一种方法

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

我写了同步的东西,它工作得很好。一切都得到双向更新。

但是,设备的初始同步基本上是成千上万条记录的大型信息转储,并且需要很长时间。我已经分析和优化了这一点,但现在只是从数据量的同步以及数据之间的关系出发。

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

有没有一种方法可以“插入”一台电脑,只需将数据库文件导入到应用程序中?

除了通过同步过程并在设备上下载和安装所有这些东西之外,是否还有其他方式可以做到这一点?

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

+0

如何制备初始'sqlite'文件,并使用它作为默认值。它可以包含在你的包中或从服务器下载。 – Adam 2013-03-20 11:24:30

+0

由于应用程序的使用方式,我无法将其放入构建中。但是我怎么能从服务器上下载?这听起来像我所需要的。 – Fogmeister 2013-03-20 11:27:11

+1

好吧,只需准备文件,将其上传到您的Web服务器,并在您的应用第一次运行时使用例如。 'NSURLConnection',保存并开始使用它。如果您使用核心数据,请确保在下载文件后初始化您的核心数据堆栈。 – Adam 2013-03-20 11:33:45

回答

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; 
} 
+0

我无法将数据构建到应用程序中。这是我遇到的问题,并且多次说过。如果我可以将数据构建到应用程序中,我就不会遇到我遇到的问题。 – Fogmeister 2013-03-20 15:07:25

相关问题