У меня есть приложение для подкастов. Когда пользователь нажимает кнопку подписки, я выполняю этот код на свои объектах:Parse localDatastore возвращает только 1 объект
PFObject.pinAllInBackground(self.episodesToSendToParse)
PFObject.saveAllInBackground(self.episodesToSendToParse)
в моем главном контроллере представления, который является PFQueryTableViewController
У меня есть следующий сгущенный код:
class MainTableViewController: PFQueryTableViewController {
override init(style: UITableViewStyle, className: String!) {
super.init(style: style, className: className)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.parseClassName = "Podcast"
self.pullToRefreshEnabled = true
self.textKey = "name"
self.imageKey = "artwork"
self.paginationEnabled = true
self.objectsPerPage = 50
}
override func viewWillAppear(animated: Bool) {
print("view will appear")
if (PFUser.currentUser() != nil) {
self.loadObjects()
print("reloading")
}
}
override func queryForTable() -> PFQuery {
let query = PFQuery(className: "Podcast")
query.fromLocalDatastore()
query.whereKey("user", equalTo: PFUser.currentUser()!)
return query
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell? {
let cellIdentifier = "Cell"
var cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as? PFTableViewCell
if cell == nil {
print("cell not created")
cell = PFTableViewCell(style: .Subtitle, reuseIdentifier: cellIdentifier)
}
if let name = object?["name"] as? String {
cell!.textLabel!.text = name
}
if let artist = object?["artist"] as? String {
cell!.detailTextLabel!.text = artist
}
return cell!
}
}
Проблема заключается в том что только один подкаст возвращается в мой tableView, который является последним сохраненным подкастом. Если я отключу queryForTable(), данные будут вытащены из Parse online, и он будет загружаться штрафом. Я проверил базу данных ParseOfflineStore
в папке симулятора, и все данные есть. Я не уверен, что я могу сделать в этот момент.
localDatastore, конечно, активирован в AppDelegate.
Редактировать: Я был долго. Все данные не сохранены правильно в локальном хранилище данных. Все эпизоды подкаста сохранены правильно, но я сохраняю родительский Podcast рекурсивно, и все же он просто заменяет предыдущий Podcast. Он не добавляет новую запись в базу данных. Вот метод я использую, чтобы сохранить Подкаст:
class SaveToParse {
let podcastClass = "Podcast"
let episodesClass = "Episodes"
var episodesToSendToParse = [PFObject]()
func savePodcastToParse(name: String, artist: String, summary: String, feedURL: String, artworkURL: String, date: NSDate, episodes: [MWFeedItem], artwork: PFFile) {
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
for episode in episodes {
let episodesToParse = PFObject(className: self.episodesClass)
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
self.episodesToSendToParse.append(episodesToParse)
self.episodesToSendToParse.append(currentP)
}
PFObject.pinAllInBackground(self.episodesToSendToParse)
PFObject.saveAllInBackground(self.episodesToSendToParse)
}
}
Поскольку 'PFQueryTableViewController' использует массив объектов (' self.objects') для заполнения таблицы, я использовал 'return self.objects !.count', но это ничего не изменило. Я считаю, что 'PFQueryTableViewController' устанавливает это за кулисами, и мне не нужно будет реализовывать' numberOfRowsInSection' в любом случае. Проблема все еще здесь печально. – user2747220
Я бы согласился с этой логикой, хотя ничего не отображалось, но если я отключу localdatastore и позволяю анализу заполнять данные из Интернета, тогда все работает нормально – user2747220