Я использую 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 теперь не синхронизированы.
Как я могу убедиться, что индексы массива данных и строк таблицы синхронизированы?
let indexPath = self.tableView.mp_indexPathForSelectedRow
mp_indexPathForSelectedRow возвращает исходный индексный путь для выбранной строки, как если бы объявления не были вставлены. - person Edward   schedule 14.07.2015editActionsForRowAtIndexPath
, это не выбирает строку. Таким образом, выбранная строка будет нулевой, если ни одна строка еще не была выбрана, или это будет другая строка, если строка уже была выбрана. Ничего хорошего - person conorgriffin   schedule 14.07.2015