【问题标题】:Save one particular object with core data in Swift在 Swift 中使用核心数据保存一个特定对象
【发布时间】:2017-07-04 21:36:13
【问题描述】:

我从网络服务中获取数据。根据这些数据,我通过以下命令创建了托管对象:

let videoTitle = snippet["title"] as! String
let videoDescription = snippet["description"] as! String
let videoThumbnail = ((snippet["thumbnails"] as! NSDictionary)["default"] as! NSDictionary)["url"] as! String
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
    return
}
let managedContext = appDelegate.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "YTVideo",
                                        in: managedContext)!
let video = YTVideo(entity: entity, insertInto: managedContext)
video.videoID = videoID
video.videoTitle = videoTitle
video.videoDescription = videoDescription
video.videoThumbnail = videoThumbnail
video.isFavorite = false
ytVideos.append(video)

在代码中,ytVideos 是一个数组。 现在用户可以选择保存对象。如果他选择保存对象,我想使用命令将其放入持久存储中:

managedContext.save()

但是,这将保存我创建的所有对象。 如何保存特定对象? 当然,我总是可以创建另一个模型,让用户玩这个模型的对象,然后将模型YTVideo 用于核心数据,但为了简单起见,我只想在我的应用程序中使用一个模型。我该怎么做? 非常感谢。

【问题讨论】:

  • 只创建那些你想保存其他对象的核心数据对象应该只是类对象。

标签: ios core-data swift3


【解决方案1】:

只保存一个对象的简单方法是创建一个子托管对象上下文,然后在该上下文中创建您的特定对象。现在,在您对父上下文调用 save 之前,它不会真正保存到持久存储中。如果你真的想让它独立于所有其他对象而持久存在,那么创建一个对等上下文。从对等点保存将推送到存储。也就是说,您需要将这些值读入上下文中才能使用它们。

【讨论】:

  • 如何创建对等管理上下文?我试过使用'newBackgroundContext()',但它似乎不起作用。如果我使用“viewContext”,它总是引用相同的托管上下文。
  • 对等上下文是使用相同持久存储并且在您偏好的队列中的上下文。由于上下文可以有许多您的应用程序独有的参数,因此我无法编写您的代码来实例化新的上下文。
猜你喜欢
  • 1970-01-01
  • 2017-08-01
  • 2015-08-04
  • 2011-03-15
  • 2018-02-21
  • 2019-09-20
  • 1970-01-01
相关资源
最近更新 更多