我正在开发一个必须完全脱机工作然后才能同步到服务器的应用。
服务器可以(也可能会)根据当前正在进行的项目进行更改。
我已经编写了同步内容,但效果非常好。一切都得到了更新。
然而,设备的初始同步基本上是数千条记录的大信息转储,并且需要很长时间。我已对此进行了分析和优化,但现在的时间仅来自同步的大量数据以及该数据之间的关系。
正常同步(即发送和获取更新)从开始到结束只需要大约5秒钟,包括读取,上传,下载和写入。
有没有办法可以“插入”计算机并将数据库文件导入应用程序?
除了通过同步过程以及在设备上下载和安装所有这些内容之外,还有其他方法吗?
我无法在构建时执行此操作,因为应用程序独立于其所在的项目,并且每个项目都有不同的数据集。
答案 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;
}