在iOS上使用带有MoPub的editActionsForRowAtIndexPath

时间:2015-07-12 12:13:59

标签: ios swift uitableview twitter-fabric mopub

我在iOS应用中使用MoPub在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]
}

例如,如果我在第三行(index = 2)中有广告,则在非MoPub广告行上滑动,我得到以下输出:

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

因此,在indexPath参数中计算了MoPub广告,但由于tableView的数据源数组中不存在该行,因此indexPath参数现在不同步。

如何确保数据数组的索引和表的行保持同步?

1 个答案:

答案 0 :(得分:2)

您可以在editActionsForRowAtIndexPath中的当前indexPath处获取单元格。使用此单元格,我们可以获得适当的indexPath,而不包含带有mp_indexPathForCell的广告索引。

由于editActionsForRowAtIndexPath接收IndexPath,这在包含广告时不同,我们必须有一种方法将indexPath编辑为正确的参数。

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

上面的代码用修改后的indexPath替换了indexPath,但没有包含广告索引。