2015-08-25 3 views
0

У меня есть приложение для подкастов. Когда пользователь нажимает кнопку подписки, я выполняю этот код на свои объектах: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) 
} 
} 

ответ

0

Вы должны реализовать numberOfRowsInSection: из UITableViewDataSource так:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return self.episodesToSendToParse.count 
} 
+0

Поскольку 'PFQueryTableViewController' использует массив объектов (' self.objects') для заполнения таблицы, я использовал 'return self.objects !.count', но это ничего не изменило. Я считаю, что 'PFQueryTableViewController' устанавливает это за кулисами, и мне не нужно будет реализовывать' numberOfRowsInSection' в любом случае. Проблема все еще здесь печально. – user2747220

+0

Я бы согласился с этой логикой, хотя ничего не отображалось, но если я отключу localdatastore и позволяю анализу заполнять данные из Интернета, тогда все работает нормально – user2747220

Смежные вопросы