Swift - 核心数据被覆盖

时间:2015-01-03 13:55:26

标签: ios xcode core-data swift parse-platform

我正在尝试将属性从我发送的邮件中保存到我的核心数据中。但每次我保存新消息时,它们都不会附加现有消息,它们只会覆盖整个实体。我希望你明白我的意思。

我的代码看起来像这样,我的接收器是从另一个VC中检索的:

    var receivers: [String] = []

        @IBAction func doneTapped(sender: AnyObject) {

            for receiver in receivers{

                var textMessage = PFObject(className:"textMessage")
                textMessage["Receiver"] = receiver
                textMessage["Message"] = messageOutl.text
                textMessage.saveInBackgroundWithBlock {

                    (success: Bool!, error: NSError!) -> Void in

                    if (success != nil) {

                        self.errorOccurred = true

                        NSLog("Object created with id: \(textMessage.objectId)")

                    } else {
                        NSLog("%@", error)
                    }
                }
            }
            let appDel: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
            let contxt: NSManagedObjectContext = appDel.managedObjectContext!
            let en = NSEntityDescription.entityForName("MainTable", inManagedObjectContext: contxt)

            var newMessage = SecondModel(entity: en!, insertIntoManagedObjectContext: contxt)

            for rec in receivers{
                newMessage.receiver = rec
                newMessage.date = NSDate()
                newMessage.messageType = typeOfMessage
                contxt.save(nil)
            }
}

有关如何解决此问题或为何发生这种情况的任何建议将不胜感激。

编辑:我将“en”和“newMessage”更改为:

let en: AnyObject! = NSEntityDescription.insertNewObjectForEntityForName("MainTable", inManagedObjectContext: contxt)

var newMessage = SecondModel(entity: en! as NSEntityDescription, insertIntoManagedObjectContext: contxt)

但现在我在第二行收到“(lldb)”错误。

编辑2:我通过摆脱第二个for循环解决了这个问题,而是在第一个for循环中放入了“save-to-core-data”代码。我仍然不知道为什么第一个代码不应该工作。

1 个答案:

答案 0 :(得分:3)

要插入CoreData,您需要使用

let en = NSEntityDescription.insertNewObjectForEntityForName( "MainTable", inManagedObjectContext: contxt) as YourType // If you have a custom type

创建实体时。

然后你通常会用这样的东西保存:

var error: NSError?
if !contxt.save(&error) {
    println("Error: \(error)")
    abort() 
}

看起来你在做:

let en = NSEntityDescription.entityForName("MainTable", inManagedObjectContext: contxt)

创建实体,但entityForName:inManagedObjectContext:类方法,根据documentation,“返回与指定的托管对象上下文的持久性存储协调器关联的托管对象模型中具有指定名称的实体“。

您不希望获取您坚持的对象;你想创建一个对象并坚持下去。

希望它有所帮助!