我创建了一个实体对象,并尝试将其保存到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");
}
答案 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
来破坏旧的上下文,并覆盖持久存储?每次访问该属性时,您都可以删除任何以前保存的数据。
这个代码示例没问题。问题在于其他地方设置上下文。