CoreData对于data manager对象提供了数据验证的机制,只有验证成功才可以插入底层的持久存储,参考如下代码:
if let ks = NSManagedObject(entity: entity, insertInto: containerVC.managedObjectContext) as? KsMain{ //fill data to ks object //插入数据库 insert(ks) } func insert(_ ks:KsMain){ do{ try ks.validateForInsert() saveContext() }catch{ print(error.localizedDescription) } }
我们当然在KsMain类中写了验证的方法,测试可知当ks未能通过验证时的确无法插入底层的数据库,但是和context绑定的TableView刷新时仍然出现了该ks对象!
这是我们不希望看到的!我们希望当底层的数据验证失败时context也不要插入任何数据.这可以通过两种方法来解决.
1.在创建ks对象时不绑定context,而在实际插入时再指定context: