Использование editActionsForRowAtIndexPath с MoPub на iOS

Я использую MoPub в своем приложении для iOS, чтобы отображать нативную рекламу в формате UITableView. Я столкнулся с проблемой, когда я получаю fatal error: Array index out of range ошибок, и я понимаю, почему, но я не могу понять, как это исправить.

MoPub вставляет строки в UITableView, и в результате параметр indexPath для editActionsForRowAtIndexPath включает строки, содержащие рекламу. Однако массив данных для таблицы не включает эти строки, и поэтому для каждого вставленного объявления indexPath строки, показывающей данные, равно +1 по сравнению с индексом в массиве данных для этой строки. См. метод editActionsForRowAtIndexPath ниже.

override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {
    // fetch the data for the currently selected row
    let currentDictionary = xmlParser.arrParsedData[indexPath.row] as Dictionary<String, String>
    self.shareURL = currentDictionary["link"]!

    var shareAction = UITableViewRowAction(style: UITableViewRowActionStyle.Normal, title: "Share" , handler: { 
        (action:UITableViewRowAction!, indexPath:NSIndexPath!) -> Void in

        NSLog("indexPath:%d", indexPath.row)

    })

    return [shareAction]
}

Например, если у меня есть реклама в третьей строке (индекс = 2), прокручивая строки с рекламой, отличной от MoPub, я получаю следующий вывод:

indexPath:0
indexPath:1
indexPath:3
indexPath:4

Таким образом, реклама MoPub учитывается в параметре indexPath, но, поскольку эта строка не существует в моем массиве источников данных для tableView, параметры indexPath теперь не синхронизированы.

Как я могу убедиться, что индексы массива данных и строк таблицы синхронизированы?


person conorgriffin    schedule 12.07.2015    source источник
comment
Привет, Конор! Если вы используете MPTableViewAdPlacer и соответствующие замены mp для вызовов метода UITableView, как определено в документации MoPub для iOS «Интеграция нативной рекламы», это устранит проблемы с синхронизацией индекса.   -  person Edward    schedule 13.07.2015
comment
Да, я использую все, что считаю нужным.   -  person conorgriffin    schedule 13.07.2015
comment
Лучше всего, вероятно, сделать небольшой пример проекта, чтобы продемонстрировать проблему.   -  person conorgriffin    schedule 13.07.2015
comment
Привет, Конор, можешь реализовать что-то подобное? let indexPath = self.tableView.mp_indexPathForSelectedRow mp_indexPathForSelectedRow возвращает исходный индексный путь для выбранной строки, как если бы объявления не были вставлены.   -  person Edward    schedule 14.07.2015
comment
Я пробовал это, но когда вы проводите пальцем влево по строке, чтобы вызвать метод editActionsForRowAtIndexPath, это не выбирает строку. Таким образом, выбранная строка будет нулевой, если ни одна строка еще не была выбрана, или это будет другая строка, если строка уже была выбрана. Ничего хорошего   -  person conorgriffin    schedule 14.07.2015


Ответы (1)


Вы можете получить ячейку по текущему indexPath в editActionsForRowAtIndexPath. С помощью этой ячейки мы можем получить соответствующий indexPath, не включая индексы объявлений с помощью mp_indexPathForCell.

Так как editActionsForRowAtIndexPath принимает IndexPath, который отличается при включении рекламы, у нас должен быть способ отредактировать indexPath с правильными параметрами.

let cell = cellForRowAtIndexPath(indexPath)
let indexPath = mp_indexPathForCell(cell)

Приведенный выше код заменяет indexPath измененным indexPath без включенных индексов объявлений.

person Edward    schedule 17.07.2015