我有一个包含4个表的SQLite数据库,我想将其加载到我的Core Data数据库中,以便实现核心数据。任何人都可以帮我这个吗?
我已准备好核心数据应用程序,并且已准备好SQLite数据库。我需要将数据从SQLite表中复制到他们在App委托中的核心数据中的4个相应实体。
我目前正在使用此代码,如何编辑它,以便不是添加到数组,而是在MOC中创建一个新对象?
-(NSMutableArray *) getCPTCodes
{
sqlite3 *database = CodesDatabase();
NSMutableArray *cptCodes = [[[NSMutableArray alloc] init] autorelease];
NSString *nsquery = [[NSString alloc] initWithFormat:@"SELECT code, short_description, medium_description FROM cpt_codes"];
const char *query = [nsquery UTF8String];
[nsquery release];
sqlite3_stmt *statement;
int prepareCode = (sqlite3_prepare_v2( database, query, -1, &statement, NULL));
if(prepareCode == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW)
{
CPTCodes *code = [[CPTCodes alloc] init];
code.code = [NSString stringWithCString:(char *)sqlite3_column_text(statement, 0) encoding:NSUTF8StringEncoding];
code.name = [NSString stringWithCString:(char *)sqlite3_column_text(statement, 1) encoding:NSUTF8StringEncoding];
code.description = [NSString stringWithCString:(char *)sqlite3_column_text(statement, 2) encoding:NSUTF8StringEncoding];
[cptCodes addObject:code];
// NSLog(@"Code: %@ Short Description: %@ Long Description: %@", hcpcsCode.code, hcpcsCode.name, hcpcsCode.description);
[code release];
}
sqlite3_finalize(statement);
}
return cptCodes;
}
不是将其加载到数组中,而是使用它将它作为核心数据中的对象添加?
insertNewObjectForEntityForName:inManagedObjectContext:
答案 0 :(得分:1)
看起来您可以创建一个实体和NSManagedObject子类来代替现有代码中的Code
类。
您的实体看起来像:
CPTCode{
code:string
name:string
desc:string // "description" is a method of NSObject so you can't use it as a property name
}
...然后你可以让Xcode生成一个自定义子类,为了清楚起见,我们称之为CPTCodeMO
。
然后您调整现有代码:
CPTCodeMO *code;
while (sqlite3_step(statement) == SQLITE_ROW){
code=[NSEntityDescription insertNewObjectForEntityForName:@"CPTCode" inManagedObjectContext:self.managedObjectContext];
code.code = [NSString stringWithCString:(char *)sqlite3_column_text(statement, 0) encoding:NSUTF8StringEncoding];
code.name = [NSString stringWithCString:(char *)sqlite3_column_text(statement, 1) encoding:NSUTF8StringEncoding];
code.description = [NSString stringWithCString:(char *)sqlite3_column_text(statement, 2) encoding:NSUTF8StringEncoding];
}
每次遍历循环都会创建一个新的CPTCodeMO实例并将其插入到托管对象上下文中。创建所有新实例后,您只需保存上下文:
[self.managedObjectContext save:&saveError];
......你做完了。
当然有细微差别,但这是基本的想法。
执行一次,您将拥有包含现有数据的Core Data SQLite存储文件。然后,您可以将其包含在应用程序包中以随应用程序一起提供,或者使用它执行其他操作。
我通常在Xcode中创建一个小实用程序app项目,只是为了进行这种导入。