【问题标题】:One to many relations Parse一对多关系解析
【发布时间】:2015-08-24 11:20:39
【问题描述】:

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

我正在将 Podcast 及其相关剧集保存到 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,并将其所有剧集保存在与其父级(播客)有关系的不同类中。如果您一次添加一集而不是一大堆,我找到了很多方法来做到这一点(我希望能够一次保存 500 个 episodesToParse 实例。

感谢您的帮助。

【问题讨论】:

  • 你被保存在不同的班级是什么意思?您真的希望每一集都属于自己的类别吗?
  • 不,我希望所有剧集都进入一个班级。每集应该是不同的行并与其播客父级相关
  • 我已经更新了我的答案。您可以使用 PFObject.saveAllInBackground

标签: ios swift parse-platform swift2


【解决方案1】:

您的问题是,您在循环之后保存了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)

【讨论】:

  • 我已经这样做了,但是如果播客有 500 个条目,它会调用网络并保存 500 次。听起来效率不高
  • 您的第二个解决方案有效,谢谢。我不得不将var episodeToParse 更改为let episodeToparse = PFObject(classeName: "Episodes")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
相关资源
最近更新 更多