【问题标题】:saving Core Data arrays and dictionaries保存 Core Data 数组和字典
【发布时间】: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 上没有收到任何错误..

我哪里错了?

【问题讨论】:

    标签: ios swift core-data


    【解决方案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 块。这篇文章可能对stackoverflow.com/questions/32650050/…有帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多