【问题标题】:Issue: Saving Json data to Core Data问题:将 Json 数据保存到 Core Data
【发布时间】:2015-04-09 16:47:13
【问题描述】:

我正在尝试学习如何从博客中读取数据并将其保存到核心数据,但保存未按预期工作。有 4 个博客条目,我希望核心数据中有 4 个不同的条目。请查看下面的代码,让我知道我哪里出错了:

 let task = session.dataTaskWithURL(url!, completionHandler:{(data , response, error) -> Void in
        if (error != nil){
            println(error)
        }else{
            var jsonResult:NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers, error: nil) as NSDictionary
            var managedObjectContext = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext!
            let newBlog = NSEntityDescription.insertNewObjectForEntityForName("BlogDetails",inManagedObjectContext:managedObjectContext) as NSManagedObject
            var dateFormater = NSDateFormatter()
            dateFormater.dateFormat = "yyyy-MM-dd HH:mm:ss" //"yyyy-MM-dd"
            var readRequest = NSFetchRequest(entityName: "BlogDetails")
            for var i = 0; i < ((jsonResult["items"] as? NSArray)?.count)!; i++ {
                var item = jsonResult["items"]![i] as NSDictionary
                var blogAuthorDirectory = item["author"]! as NSDictionary
                var blogAuthor = blogAuthorDirectory["displayName"] as NSString
                var blogAuthorImageDirectory = blogAuthorDirectory["image"] as NSDictionary
                // concatenate String
                var blogAuthorImage =  blogAuthorImageDirectory["url"] as NSString
                var blogAuthorImageUrl = ("https:" + blogAuthorImage)
                var title = item["title"] as String
                // convert date from String
                var publishedDate:NSDate = dateFormater.dateFromString(stringTmp as NSString)!
                // read content
                var content = item["content"] as? NSString
                // Write it to core data
                newBlog.setValue(blogAuthorImageUrl, forKey: "image")
                newBlog.setValue(blogAuthor, forKey: "author")
                newBlog.setValue(title, forKey: "title")
                newBlog.setValue(publishedDate, forKey: "publisheddate")
                managedObjectContext.save(nil)
                var results = managedObjectContext.executeFetchRequest(readRequest, error: nil)
                println(results)
            }
        }
    })
    task.resume()

以下是最后一次迭代的结果中的条目: 1. 它只有 3 个字典计数,其中前 2 个计数中的所有项目都为零。那是如何产生的? 2. 每次迭代时,它都会覆盖最后一次计数中的值,而不是追加它。

感谢您的帮助。

【问题讨论】:

    标签: swift core-data


    【解决方案1】:

    如果您想将对象附加到您的 CoreData,您需要在调用 managedContext.save(nil) 方法之前执行 insertIntoManagedObjectContext

    但是,你的

    let newBlog = NSEntityDescription.insertNewObjectForEntityForName("BlogDetails",inManagedObjectContext:managedObjectContext) as NSManagedObject
    

    在您的 for 循环之外声明,因此每次迭代后可能不会创建新博客。

    【讨论】:

    • 感谢您的帮助!!当我将线路放入循环时它起作用了。所以对于每个新的字典块,我们必须重新实例化 NSEntityDescription.insertNewObjectForEntityForName。
    猜你喜欢
    • 1970-01-01
    • 2021-11-06
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    相关资源
    最近更新 更多