将字典保存到核心数据

Saving a Dictionary to Core Data

我的应用程序解析播客 RSS 提要。我使用 2 个实体:播客(保存与播客相关的数据)和剧集(剧集数据,如摘要等)。解析提要后,我将剧集列表存储在名为 "episodesToDisplay" 的数组中。当用户订阅播客时,我想将该数组保存的数据保存在 Core Data 中。这是我的代码,它在下面的注释行中抛出错误:

class Podcasts: UITableViewController {
var currentPodcast: Podcasts!

    override func viewDidLoad() {
    super.viewDidLoad()
let podcastsEntity = NSEntityDescription.entityForName("Podcasts", inManagedObjectContext: self.managedContext)
    let podcastsFetch = NSFetchRequest(entityName: "Podcasts")
    var error: NSError?

    let result = self.managedContext.executeFetchRequest(podcastsFetch, error: &error) as [Podcasts]?
    if let resu = result {
        println("res is \(resu.count)")
        self.currentPodcast = resu[0] as Podcasts
    } else {
        println("did not work")
    }
}

    @IBAction func subscribe(sender: AnyObject) {
        for dict: AnyObject in episodesToDisplay {
    let episodesEntity = NSEntityDescription.entityForName("Episodes", inManagedObjectContext: self.managedContext)
    let episodesToSave = Episodes(entity: episodesEntity!, insertIntoManagedObjectContext: self.managedContext)
    var episodes = currentPodcast.episode.mutableCopy() as NSMutableOrderedSet
    let btDict = dict as NSDictionary <---------------- Crash
        episodesToSave.title = btDict["title"] as String
        episodesToSave.summary = btDict["summary"] as String
        episodesToSave.link = btDict["link"] as String
        episodes.addObject(episodesToSave)
        currentPodcast.episode = episodes.copy() as NSOrderedSet

    }



    // Save
    var error:NSError?
    if !self.managedContext.save(&error) {
        println("could not save \(error)")
    }
}

有什么想法吗?

错误表明您的数组不包含 NSDictionary 对象 - 这就是为什么当您尝试访问元素 asNSDictionary 时出现动态转换异常的原因。

从您的评论来看,您的数组似乎实际上包含 MWFeedItem 个对象,因此您需要做的就是更改代码以使用该对象类型,然后您就可以访问 MWFeedItem -

@IBAction func subscribe(sender: AnyObject) {
        for item: MWFeedItem in episodesToDisplay {
    let episodesEntity = NSEntityDescription.entityForName("Episodes", inManagedObjectContext: self.managedContext)
    let episodesToSave = Episodes(entity: episodesEntity!, insertIntoManagedObjectContext: self.managedContext)
    var episodes = currentPodcast.episode.mutableCopy() as NSMutableOrderedSet
        episodesToSave.title = item.title
        episodesToSave.summary = item.summary
        episodesToSave.link = item.link
        episodes.addObject(episodesToSave)
        currentPodcast.episode = episodes.copy() as NSOrderedSet

    }