Core Data第一次未能在实体中保存数据

5

我正在开发一个使用core data的iOS应用程序。由于有大量的实体和需要保存的数据,因此我使用“私有上下文”方法在后台线程中保存数据,并使用块。除了一个实体外,所有实体都很好地运行。

在这个实体中,当应用程序首次启动并同步数据时,数据不会被保存,但之后如果再次同步数据,则该实体中的所有数据都将被保存。以下是我的保存数据代码:

let programAttendeeAssignArray:NSArray? = dict["data_assign"] as AnyObject? as? NSArray
for var paAssignIndex = 0; paAssignIndex < programAttendeeAssignArray?.count; paAssignIndex++ {
    let programAttendeeAssignObj:NSDictionary? = programAttendeeAssignArray?.objectAtIndex(paAssignIndex) as AnyObject? as? NSDictionary
    if let paAssignDict = programAttendeeAssignObj as? [String: AnyObject] {
        var keyString: String = ""
        if let eID = paAssignDict["id"]! as? Int {
            keyString = String(eID)
        }

        let paAssign: Conf_speakers = Utilities.sharedInstance.getOrCreateObjectOfEntityName("Conf_speakers", key: "id", identifier: keyString, localContext: privateContext) as! Conf_speakers

        if let eeid = paAssignDict["id"]! as? Int {
            paAssign.id = String(eeid)
        }

        if let attendee_id = paAssignDict["id1"]! as? Int {
            paAssign.attendee_id = String(attendee_id)
        }

        if let agenda_id = paAssignDict["id2"]! as? Int {
            paAssign.agenda_id = String(agenda_id)
        }

        if let updated_at = paAssignDict["id3"]! as? String {
            paAssign.updated_at = updated_at
        }                       
    }
}

let error: NSErrorPointer = nil
do {
    try privateContext.save()                    
} catch let error1 as NSError {
    error.memory = error1
} catch {
    fatalError()
}

dispatch_async(dispatch_get_main_queue(), {
    appDelegate.managedObjectContext.performBlock { () -> Void in
        //var fds:Bool
        do {
            try
            print("Result MSG: \(appDelegate.managedObjectContext.save())")
            // fds = true
        } catch _ {
            //fds = false
        }
    }
})

你尝试过不使用线程来处理这个特定的实体吗? - Poles
是的,没有线程它正在其中保存数据。 - Aleem Ahmad
appDelegate.managedObjectContext 是父上下文还是子上下文? - KrishnaCA
这是一个父级上下文。 - Aleem Ahmad
你发布的代码中有一些部分并不能帮助我们诊断问题:能否请您展示一下 getOrCreateObjectOfEntityName 方法?您是如何创建上下文以及调用同步方法的,是否在 performBlock 中进行?顺便提一句,您的代码中有太多未处理的可选项。您是如何确保传递的数据不为空的呢? - ELKA
显示剩余2条评论
1个回答

0
 let appDel : AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let context : NSManagedObjectContext = appDel.managedObjectContext

    let request = NSFetchRequest(entityName: "TableName")
    request.returnsObjectsAsFaults = false
    do {
        var results :NSArray

        try  results = context.executeFetchRequest(request)
        if results.count == 0
        {

        }
        else{

            let managedObject = results[0]
            managedObject.setValue(text, forKey: "TableEntity")
            //save data into table
            try context.save()


        }
    }
    catch{}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接