保存 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 数组和字典的主要内容,如果未能解决你的问题,请参考以下文章
如何将字典和数组保存在同一个存档中(使用 numpy.savez)