一对多关系解析

One to many relations Parse

我找遍了,但找不到这个问题的答案。

我正在将播客及其相关剧集保存到 Parse,但以下代码仅保存 1 集和播客(我想在 for 循环中找到的每个条目都会重置 currentP,并且只有找到的最后一个值会得到已保存)。

 let currentP = PFObject(className: self.podcastClass)
    currentP["user"] = PFUser.currentUser()
    currentP["name"] = name
    currentP["artist"] = artist
    currentP["summary"] = summary
    currentP["feedURL"] = feedURL
    currentP["artworkURL"] = artworkURL
    currentP["artwork"] = artwork
    currentP["date"] = date

 let episodesToParse = PFObject(className: self.episodesClass)
    for episode in episodes {
    episodesToParse["showDate"] = episode.date
    episodesToParse["title"] = episode.title          
    episodesToParse["downloadURL"] =  episode.enclosures[0].valueForKey("url") as? String
    episodesToParse["showNotes"] = episode.summary
    episodesToParse["localPath"] = ""
    episodesToParse["isDownloaded"] = "no"
    episodesToParse["parent"] = currentP
}
 episodesToParse.saveInBackground()

如果我使用 episodesToParse.addObject(episode.date, forKey: "showDate") 之类的东西,则会返回以下错误:

[Error]: invalid type for key showDate, expected date, but got array (Code: 111, Version: 1.8.1)

我不确定如何进行。我想要的是按原样保存 currentP,并将其所有剧集保存在与其父级 (Podcast) 有关系的不同 class 中。如果您一次添加一集而不是一大堆,我找到了很多方法来做到这一点(我希望能够一次保存 500 个 episodesToParse 实例。

感谢您的帮助。

你的问题是,你在循环后保存了 episodesToParse。您必须将 episodesToParse.saveInBackground() 移动到循环内,以便每次循环设置剧集的属性时,剧集都会更新:

for episode in episodes {
    episodesToParse["showDate"] = episode.date
    episodesToParse["title"] = episode.title          
    episodesToParse["downloadURL"] =  episode.enclosures[0].valueForKey("url") as? String
    episodesToParse["showNotes"] = episode.summary
    episodesToParse["localPath"] = ""
    episodesToParse["isDownloaded"] = "no"
    episodesToParse["parent"] = currentP

    //Inside
    episodesToParse.saveInBackground()
}

或者您可以使用 PFObject.saveAllInBackground 来保存所有对象:

var episodesToSave[PFObject] = []

for episode in episodes {
    var episodeToParse
    episodeToParse["showDate"] = episode.date
    episodeToParse["title"] = episode.title          
    episodeToParse["downloadURL"] =  episode.enclosures[0].valueForKey("url") as? String
    episodeToParse["showNotes"] = episode.summary
    episodeToParse["localPath"] = ""
    episodeToParse["isDownloaded"] = "no"
    episodeToParse["parent"] = currentP

    //Add to episode-array
    episodesToSave.append(episodesToParse)
}

//Save all objects in the array
PFObject.saveAllInBackground(episodesToSave)