editActionsForRowAtIndexPath

editActionsForRowAtIndexPath

我在iOS应用程序中使用MoPub在UITableView中显示本地广告。我遇到了一个问题,我得到了fatal error: Array index out of range错误,我知道为什么,但我无法找出如何解决它。
MoPub将行插入UITableView中,因此indexPatheditActionsForRowAtIndexPath参数包含包含广告的行。但是,表的数据数组不包括这些行,因此对于插入的每个广告,显示数据的行的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广告行上滑动,我将得到以下输出:
索引:0
索引:1
索引:3
索引:4
因此,MuPub广告在索引路径参数中被计数,但是因为在TabLVIEW的数据源数组中不存在该行,所以索引路径参数现在不同步。
如何确保数据数组的索引和表的行保持同步?

最佳答案

您可以在editActionsForRowAtIndexPath中的当前索引处获取单元格。有了这个单元格,我们就可以得到适当的indexPath,而不必使用mp_indexPathForCell包含ads索引。
由于editActionsForRowAtIndexPath采用了IndexPath,这与包含广告时的IndexPath不同,因此我们必须有一种方法将IndexPath编辑为正确的参数。

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

上面的代码用修改后的indexPath替换indexPath,不包括ad索引。

07-26 05:39