核心数据保存

时间:2011-05-24 11:55:33

标签: iphone objective-c ipad core-data

我创建了一个实体对象,并尝试将其保存到sqllite,它说保存已完成,没有错误,但它没有在数据库中显示任何解决该建议的建议

我使用以下代码

Studies *study_NEW = (Studies *)[NSEntityDescription insertNewObjectForEntityForName:@"Studies" inManagedObjectContext:managedObjectContext_NEW];

study_NEW.SudyID = study.SudyID;
error = nil;
if (![study_NEW.managedObjectContext save:&error]) {
// Handle error
NSLog(@"Unresolved error study %@, %@", error, [error userInfo]);
abort();  // Fail
}
else{
NSLog(@"Study inserted successfuly");
}

2 个答案:

答案 0 :(得分:2)

Studies *study_NEW = (Studies *)[NSEntityDescription insertNewObjectForEntityForName:@"Studies" inManagedObjectContext:managedObjectContext_NEW];

//study_NEW.SudyID = study.SudyID;

[study_NEW setSudyID:[study SudyID]];

OR

[study_NEW setSudyID:study.SudyID];

error = nil;
if (![study_NEW.managedObjectContext save:&error]) {

// Handle error
NSLog(@"Unresolved error study %@, %@", error, [error userInfo]);

exit(-1);  // Fail

}

else{

NSLog(@"Study inserted successfuly");

}

答案 1 :(得分:1)

执行此代码时,如果NSManagedObjectContext无效,第一行将导致异常。所以我的猜测是你的NSManagedObjectContext没有连接到你认为应该连接到的持久性商店。检查您的上下文设置代码。也许代码无法将持久存储连接到NSPersistentStoreCoordinator

我认为发送到没有持久存储的NSManagedObjectContext的保存是NOP,没有执行任何操作,这应该总是成功。所以我尝试了我的一个项目,我注释了持久存储到上下文的附件,然后运行程序。该程序试图保存时抛出异常。因此,您必须具有持久性存储,否则发送到您的上下文的保存消息将导致异常。

那么managedObjectContext_NEW是什么?这是你对象的属性吗?它是否有一个存取方法可以创建一个新的NSManagedObjectContext来破坏旧的上下文,并覆盖持久存储?每次访问该属性时,您都可以删除任何以前保存的数据。

这个代码示例没问题。问题在于其他地方设置上下文。