Nano Hash - криптовалюты, майнинг, программирование

Ячейка TableView показывает последнее загруженное изображение для анализа всех ячеек?

У меня есть PFQueryTableViewController, который загружает мои изображения из разбора.

У меня все работало правильно, отображая правильное изображение во всех ячейках, но сегодня я также добавил ячейку заголовка, и теперь у меня есть headerCell, отображающий правильную информацию, а также меняющийся (именно так, как я хочу), но теперь ячейка, отображающая imageView, показывает последнее изображение, загруженное для всех ячеек, а не другое изображение, как должно быть...?!

Вот код, который управляет моей таблицей. Но я не могу понять, что не так!

объект, является ли объект var: PFObject?

    override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 46
    }

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return objects!.count
    }



    override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let headerCell = tableView.dequeueReusableCellWithIdentifier("PostHeader") as! PostHeaderTableViewCell


        let object = objects![section]
        let username = object.objectForKey("user")?.objectForKey("username") as? String
        headerCell.usernameLabel.text = username!.capitalizedString


        let dataFormatter: NSDate = NSDate(timeIntervalSinceNow: -4)
        NSLog("Time Ago: %@", dataFormatter.shortTimeAgoSinceNow())
        headerCell.timeLabel.text = dataFormatter.shortTimeAgoSinceDate((object.createdAt)!)

        if (object.objectForKey("user")!.objectForKey("profilePicture") != nil)
        {
            let userImageFile:PFFile = object.objectForKey("user")!.objectForKey("profilePicture") as! PFFile
            userImageFile.getDataInBackgroundWithBlock({ (imageData: NSData?, error: NSError?) -> Void in
                headerCell.postProfilePicture.image = UIImage(data: imageData!)
                headerCell.postProfilePicture.layer.cornerRadius = 0.1 * headerCell.postProfilePicture.bounds.size.width
                headerCell.postProfilePicture.clipsToBounds = true

            })
        }


        return headerCell
    }


    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {


        return 1
    }




    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell?
    {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! BaseTableViewCell

        cell.titleLabel?.text = object?.objectForKey("title") as? String

        let imageFile = object?.objectForKey("imageFile") as? PFFile
        cell.cellImageView?.image = UIImage(named: "circle")
        cell.cellImageView?.file = imageFile
        cell.cellImageView.loadInBackground()


        return cell
    }

    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
    {
        if indexPath.row + 1 > self.objects?.count
        {
            return 44
        }
        let height = super.tableView(tableView, heightForRowAtIndexPath: indexPath)
        return height
    }

Если кто-то может помочь, это было бы потрясающе!!


  • Не уверен, что это относится к вашей проблеме, но вы возвращаете много разных разделов и только одну строку для каждого раздела, поэтому изображение всегда будет первым в вашем массиве источников данных. 23.01.2016
  • привет @ pbush25 Я пытался добавить 2 и т. Д. Не уверен, что это будет иметь значение, но то, что я сделал, это показать 1 ячейку заголовка и 2 изображения (последние 2), и это было просто повторено для столько ячеек, сколько у меня было! 23.01.2016
  • Вы намерены иметь столько разделов, сколько изображений? 23.01.2016
  • @ pbush25 хорошо, я хочу отобразить столько ячеек и ячеек заголовка, сколько изображений загружено в Parse, поэтому, если у меня есть 30 разных изображений, загруженных в Parse, я хотел бы отобразить 30 из каждой ячейки, показывая все разные изображения (а не только последнее для загружать как сейчас) 23.01.2016

Ответы:


1

Я думаю, что ваша проблема связана с методом переопределения cellForRowAtIndexPath, который вы используете. Поскольку общий PFQueryTableViewController предназначен только для одного раздела, при использовании этого метода с сигнатурой (tableView, indexPath, object) вместо метода по умолчанию с сигнатурой (tableView, indexPath) метод всегда будет извлекать то количество изображений, которое вы вернули в numberOfRowsInSection. Вместо этого я предлагаю вам использовать обычный cellForRowAtIndexPath(tableView: UITableView, indexPath: NSIndexPath) -> UITableViewCell!, а затем получить объект на основе indexPath.

Это будет выглядеть так:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell!
{
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! BaseTableViewCell
    if let object = objects![indexPath.row] as? PFObject {
        cell.titleLabel?.text = object?.objectForKey("title") as? String

        let imageFile = object.objectForKey("imageFile") as? PFFile
        cell.cellImageView?.image = UIImage(named: "circle")
        cell.cellImageView?.file = imageFile
        cell.cellImageView.loadInBackground()
    }
    return cell
}

Затем вы получите изображение для соответствующего пути индекса, который вы ищете, вместо того, чтобы всегда использовать первый.

Вы также можете попробовать напечатать indexPath.row в этом методе, когда он вызывается, чтобы увидеть, меняется ли indexPath.

EIDT: На самом деле кажется, что даже это может не сработать. Вы можете попробовать следовать руководству здесь, но там прямо упоминается, что PFQueryTableViewController не предназначен для работы с несколькими разделами. Вероятно, вам лучше создать подкласс обычного UITableViewController

23.01.2016
  • хм, хорошо, я попробую и дам вам знать! 23.01.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..