我在app store中有一个应用程序,它在本地存储sqlite数据库中的数据。现在我想在最新版本中使用核心数据,我如何能够将sqlite数据与核心数据同步并使用核心数据继续我的应用程序? 考虑用户是否打开了应用程序,然后他的数据应与iCloud数据同步,并且在使用应用程序时不会对用户造成任何干扰。
答案 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,但其架构不会与您在SQLite文件中使用的架构相同,因此这是唯一的方法。
这假设您实际上意味着您希望将数据从SQLite文件一次性移动到Core Data。这就是您的问题所描述的内容,即使您的主题内容是&#34;同步&#34;。保持两个不同的数据副本同步是一个更复杂的问题。