我正在做我的作业。基本上,该应用程序将继续跟踪我所做的活动。 我使用核心数据来保留跟踪记录,该约束适用于标题,因为我不想跟踪相同的活动(核心数据的图片如下所示)
当我第一次运行时,一切正常。但是,在我关闭应用程序并再次运行它后,当我添加全新的活动时,约束工作错误,但它总是显示该活动已存在于核心数据中。
奇怪的是,它显示了其他实体(俚语)的 NSConstraintConflict,如下所示:
轨迹已存在于 coredata 错误域 = NSCocoaErrorDomain 代码 = 133021 “(空)” UserInfo = {conflictList =( “约束的 NSConstraintConflict (0x7f9721c9cf00) ( 单词 ): 数据库: (实体: 俚语; id: 0xd000000000040000 ; 数据: ),conflictedObjects: ( \”(实体:俚语;id:0xd0000000018c0000;数据:{ 解释 = \"非常好!非常好!\"; 发音 = \"/e\U026as/\"; 发音Mp3 = ace; 单词=王牌; })\" )” )}, [冲突列表: <__NSArrayM 0x7f972401eaf0>( NSConstraintConflict (0x7f9721c9cf00) 对于约束 ( 单词 ): 数据库: (实体: 俚语; id: 0xd000000000040000 ; 数据: ),conflictedObjects: ( “(实体:俚语;id:0xd0000000018c0000;数据:{ 解释 = \"非常好!非常好!\"; 发音 = \"/e\U026as/\"; 发音Mp3 = ace; 单词=王牌; })" ) ) ]
这是我用来将轨迹保存到核心数据中的代码:
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let context = appDelegate.managedObjectContext
let entity = NSEntityDescription.entityForName("Track", inManagedObjectContext:context)
let newTrack = Track(entity:entity!, insertIntoManagedObjectContext: context)
do {
newTrack.title = self.thisActivity.title!
newTrack.star = self.thisActivity.star!
newTrack.dodate = NSDate()
newTrack.webpic = UIImagePNGRepresentation(self.thisActivity.picture!)!
newTrack.uptext = ""
newTrack.uppic = ""
try context.save()
SweetAlert().showAlert("Done!", subTitle: "Save to your track!", style: AlertStyle.Success)
} catch let error as NSError {
print("Track already existed in coredata \(error), \(error.userInfo)")
SweetAlert().showAlert("Sorry!", subTitle: "You have saved before!", style: AlertStyle.Success)
context.deleteObject(newTrack)
}
期待聆听你们的解决方案
您有一个约束,即
word
字段必须是唯一的。这意味着当您插入新曲目时,您要么需要使用新单词,要么删除旧记录。这里有很多信息:http://dorianroy.com/blog/2015/09/how-to-implement-unique-constraints-in-core-data-with-ios-9/
我尝试了很多方法,最后这个方法对我有用。 我创建了 2 个数据模型(一个用于俚语,一个用于 Track),然后为它们创建 2 个核心数据堆栈:D
您需要为上下文设置
mergePolicy
,例如:
context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
这让 Core Data 知道在遇到合并冲突时该怎么做。