Swift 问题:将Json数据保存到核心数据

Swift 问题:将Json数据保存到核心数据,swift,core-data,Swift,Core Data,我试图学习如何从博客中读取数据并将其保存到核心数据中,但保存并没有按预期工作。有4个博客条目,我希望在核心数据中有4个不同的条目。请查看下面的代码,并告诉我哪里出了问题: let task = session.dataTaskWithURL(url!, completionHandler:{(data , response, error) -> Void in if (error != nil){ println(error) }e

我试图学习如何从博客中读取数据并将其保存到核心数据中,但保存并没有按预期工作。有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()
let task=session.dataTaskWithURL(url!,completionHandler:{(数据、响应、错误)->中的Void
如果(错误!=nil){
println(错误)
}否则{
var jsonResult:NSDictionary=NSJSONSerialization.JSONObjectWithData(数据,选项:.MutableContainers,错误:nil)作为NSDictionary
var managedObjectContext=(UIApplication.sharedApplication().delegate作为AppDelegate)。managedObjectContext!
让newBlog=NSEntityDescription.insertNewObjectForEntityForName(“BlogDetails”,inManagedObjectContext:managedObjectContext)作为NSManagedObject
var dateformatter=NSDateFormatter()
DateFormatter.dateFormat=“yyyy-MM-dd HH:MM:ss”//“yyyy-MM-dd”
var readRequest=NSFetchRequest(entityName:“BlogDetails”)
对于var i=0;i<((jsonResult[“items”]作为?NSArray)?.count)!;i++{
var item=jsonResult[“items”]![i]作为NSDictionary
var blogAuthorDirectory=item[“author”]!作为NSDictionary
var blogAuthor=blogAuthorDirectory[“displayName”]作为NSString
var blogAuthorImageDirectory=blogAuthorDirectory[“image”]作为NSDictionary
//连接字符串
var blogAuthorImage=blogAuthorImageDirectory[“url”]作为NSString
变量blogAuthorImageUrl=(“https:+blogAuthorImage)
var title=项目[“title”]作为字符串
//从字符串转换日期
var publishedDate:NSDate=DateFormatter.dateFromString(stringTmp作为NSString)!
//阅读内容
变量内容=项目[“内容”]为?NSString
//将其写入核心数据
setValue(blogAuthorImageUrl,forKey:“图像”)
setValue(blogoauthor,forKey:“author”)
newBlog.setValue(标题,forKey:“标题”)
setValue(publishedDate,forKey:“publishedDate”)
managedObjectContext.save(无)
var results=managedObjectContext.executeFetchRequest(readRequest,错误:nil)
println(结果)
}
}
})
task.resume()
以下是上次迭代结果中的条目: 1.它只有3个字典计数,其中前2个计数中的值的所有项都为零。这是如何产生的? 2.在每次迭代中,它都会覆盖上一次计数中的值,而不会追加该值


谢谢您的帮助。

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

然而,你的

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

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

如果要将对象附加到CoreData,则需要在调用
managedContext.save(nil)
方法之前执行此操作

然而,你的

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

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

如果要将对象附加到CoreData,则需要在调用
managedContext.save(nil)
方法之前执行此操作

然而,你的

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

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

如果要将对象附加到CoreData,则需要在调用
managedContext.save(nil)
方法之前执行此操作

然而,你的

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

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

谢谢您的帮助!!当我把线放进环路时,它起作用了。因此,对于每个新的字典块,我们都必须重新实例化NSEntityDescription.insertNewObjectForEntityForName。谢谢您的帮助!!当我把线放进环路时,它起作用了。因此,对于每个新的字典块,我们都必须重新实例化NSEntityDescription.insertNewObjectForEntityForName。谢谢您的帮助!!当我把线放进环路时,它起作用了。因此,对于每个新的字典块,我们都必须重新实例化NSEntityDescription.insertNewObjectForEntityForName。谢谢您的帮助!!当我把线放进环路时,它起作用了。因此,对于每个新字典块,我们必须重新实例化NSEntityDescription.insertNewObjectForEntityForName。