关闭和打开应用程序后核心数据约束工作错误(Swift)

问题描述 投票:0回答:3

我正在做我的作业。基本上,该应用程序将继续跟踪我所做的活动。 我使用核心数据来保留跟踪记录,该约束适用于标题,因为我不想跟踪相同的活动(核心数据的图片如下所示) https://i.stack.imgur.com/qEySx.jpg

当我第一次运行时,一切正常。但是,在我关闭应用程序并再次运行它后,当我添加全新的活动时,约束工作错误,但它总是显示该活动已存在于核心数据中。

奇怪的是,它显示了其他实体(俚语)的 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)
            }

期待聆听你们的解决方案

ios swift core-data
3个回答
1
投票

您有一个约束,即

word
字段必须是唯一的。这意味着当您插入新曲目时,您要么需要使用新单词,要么删除旧记录。这里有很多信息:http://dorianroy.com/blog/2015/09/how-to-implement-unique-constraints-in-core-data-with-ios-9/


0
投票

我尝试了很多方法,最后这个方法对我有用。 我创建了 2 个数据模型(一个用于俚语,一个用于 Track),然后为它们创建 2 个核心数据堆栈:D


0
投票

您需要为上下文设置

mergePolicy
,例如:

context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy

这让 Core Data 知道在遇到合并冲突时该怎么做。

© www.soinside.com 2019 - 2024. All rights reserved.