保存 Core Data 数组和字典

Posted

技术标签:

【中文标题】保存 Core Data 数组和字典【英文标题】:saving Core Data arrays and dictionaries 【发布时间】:2016-02-21 18:42:00 【问题描述】:

参考我之前的问题:Unique value of object to use in section Swift

我现在的问题是核心数据。这是在前面的代码之后保存数据以填充部分和表的代码:

let app = UIApplication.sharedApplication().delegate as! AppDelegate
let context = app.managedObjectContext
let entity = NSEntityDescription.entityForName("Movie", inManagedObjectContext: context)!
let movie = Movie(entity: entity, insertIntoManagedObjectContext: context)
movie.title = title.text
movie.plot = plot.text
movie.genre = genre.text


context.insertObject(movie)

do 
    try context.save()
 catch 
    print("Could not save movie")

获取数据是:

let app = UIApplication.sharedApplication().delegate as! AppDelegate
let context = app.managedObjectContext
let fetchRequest  = NSFetchRequest(entityName: "Movie")

do 
    let results = try context.executeFetchRequest(fetchRequest)
    self.loadMovie = results as! [Movie]
 catch let err as NSError 
    print(err.debugDescription)

但是我在 loadMovie Line 上没有收到任何错误..

我哪里错了?

【问题讨论】:

【参考方案1】:

首先,删除该行

context.insertObject(movie)

因为该对象已经插入到let movie = 行中。

要加载电影,您需要使用 insertMovie(movie : Movie) 函数重新创建数据结构。

let movies = try context.executeFetchRequest(fetchRequest) as! [Movie]
loadMovie.removeAll()
for movie in movies 
    insertMovie(movie)

【讨论】:

【参考方案2】:

正如您先前问题的答案所建议的那样,self.loadMovie 现在的类型为 [String:[Movie]],因此您可能应该尝试将 results 转换为 [String:[Movie]]

改用self.loadMovie = results as! [String:[Movie]]

【讨论】:

不幸的是使用 [String:[Movie]] 我得到了这个错误:“从这里抛出的错误没有被处理,因为封闭的 catch 不是详尽的”。有什么建议吗? 您可以在最后添加另一个 catch 块。这篇文章可能对***.com/questions/32650050/…有帮助。

以上是关于保存 Core Data 数组和字典的主要内容,如果未能解决你的问题,请参考以下文章

python 保存和读取字典

如何将字典和数组保存在同一个存档中(使用 numpy.savez)

如何在 CoreData 中保存字典数组?

Swift - 将字典数组保存到 NSUserDefaults

Swift JSON字符串和字典以及数组的互转

在两个字典数组中查找重复键以使用新数组字典更新旧数组字典