【发布时间】:2015-07-12 12:13:59
【问题描述】:
我在我的 iOS 应用程序中使用 MoPub 在 UITableView 中显示原生广告。我遇到了一个问题,我收到了fatal error: Array index out of range 错误,我明白为什么,但我不知道如何解决它。
MoPub 在UITableView 中插入行,因此editActionsForRowAtIndexPath 的indexPath 参数包括包含广告的行。但是,表的数据数组不包括这些行,因此对于插入的每个广告,与该行的数据数组中的索引相比,显示数据的行的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 广告行上滑动,我会得到以下输出:
索引路径:0
索引路径:1
索引路径:3
索引路径:4
因此,MoPub 广告被计入 indexPath 参数,但由于该行在我的 tableView 数据源数组中不存在,因此 indexPath 参数现在不同步。
如何确保数据数组的索引和表的行保持同步?
【问题讨论】:
-
嘿 Conor,如果您使用 MPTableViewAdPlacer 以及 MoPub 的 iOS 文档“原生广告集成”中定义的 UITableView 方法调用的相应 mp 替换,这将解决您的索引同步问题。
-
是的,我正在使用我认为我需要的所有这些
-
最好的办法可能是制作一个小示例项目来演示问题
-
嘿康纳,你能实现这样的东西吗?
let indexPath = self.tableView.mp_indexPathForSelectedRowmp_indexPathForSelectedRow 返回所选行的原始索引路径,就好像没有插入任何广告一样。 -
我试过了,但是当您在一行上向左滑动以触发
editActionsForRowAtIndexPath方法时,这不会选择该行。因此,如果尚未选择任何行,则所选行将为 nil,如果已选择行,则所选行将为另一行。两者都不好
标签: ios swift uitableview twitter-fabric mopub