如何将sqlite数据库与Core Data同步?

时间:2015-05-14 09:41:24

标签: ios sqlite core-data

我在app store中有一个应用程序,它在本地存储sqlite数据库中的数据。现在我想在最新版本中使用核心数据,我如何能够将sqlite数据与核心数据同步并使用核心数据继续我的应用程序? 考虑用户是否打开了应用程序,然后他的数据应与iCloud数据同步,并且在使用应用程序时不会对用户造成任何干扰。

2 个答案:

答案 0 :(得分:0)

self.dbManager = [[DBManager alloc] initWithDatabaseFilename:@"revampadhocdb.sql"];
NSString *adhocquery = @"select * from revampadhoctable";

NSArray *adhoctemp = [[NSArray alloc] initWithArray:[self.dbManager loadDataFromDB:adhocquery]];
NSLog(@"adhoc Databse%@",adhoctemp);

//From Adhoc Database fill some data
for (int i=0; i<adhoctemp.count; i++) {

    DigitalConatct *dgContact=[[DigitalConatct alloc] init];
    [dgContact setDgName:[[adhoctemp objectAtIndex:i] objectAtIndex:1]];
    [dgContact setBirthDate:[[adhoctemp objectAtIndex:i] objectAtIndex:2]];
    [dgContact setContactUrl:[[adhoctemp objectAtIndex:i] objectAtIndex:3]];
    [dgContact setDgtype:@"Adhoc"];
    [dgContact setDigitalImage:nil];
    [dgContact setSubType:@"Person"];
    [dgContact setSubTypeName:[[adhoctemp objectAtIndex:i] objectAtIndex:4]];
    [dgContact setSubTypeDesc:[[adhoctemp objectAtIndex:i] objectAtIndex:5]];
    [dgContact setSummary:[[adhoctemp objectAtIndex:i] objectAtIndex:6]];
    [dgContact setDg_ID:[NSNumber numberWithInt:[[[adhoctemp objectAtIndex:i] objectAtIndex:0] intValue]]];


    [self insertNewDAObject:dgContact];
}

#pragma mark insert
- (DAContact *)insertNewDAObject:(DigitalConatct *)daDemo
{   
NSManagedObjectContext *context = [self managedObjectContext];
DAContact *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"DAContact" inManagedObjectContext:context];

newDevice.dgcontact=daDemo;
newDevice.active=[NSNumber numberWithBool:YES];
newDevice.type=daDemo.dgtype;
newDevice.dgname=daDemo.dgName;

// Save the context.
NSError *error = nil;
if (![context save:&error]) {
    // Replace this implementation with code to handle the error appropriately.
    // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}

return newDevice;

}

在coredata中创建一个simlar模式并在coredata中迁移所有sqlite行.Below是我将revampadhoctable的所有行迁移到核心数据并手动插入的示例

答案 1 :(得分:0)

唯一的方法就是亲自去做。如同,编写自己的自定义代码

  • 从您当前的SQLite文件中读取数据
  • 将其写入新的Core Data持久性商店

核心数据可以使用SQLite,但其架构不会与您在SQLite文件中使用的架构相同,因此这是唯一的方法。

这假设您实际上意味着您希望将数据从SQLite文件一次性移动到Core Data。这就是您的问题所描述的内容,即使您的主题内容是&#34;同步&#34;。保持两个不同的数据副本同步是一个更复杂的问题。