Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用单独的UITableViewDataSource类管理#选择器?_Ios_Swift_Uitableview_Nsobject_Unrecognized Selector - Fatal编程技术网

Ios 如何使用单独的UITableViewDataSource类管理#选择器?

Ios 如何使用单独的UITableViewDataSource类管理#选择器?,ios,swift,uitableview,nsobject,unrecognized-selector,Ios,Swift,Uitableview,Nsobject,Unrecognized Selector,我的UITableView import UIKit class CardDataSource: NSObject, UITableViewDataSource { //MARK:- Property var medialObjects: [MediaCardObject]? let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).f

我的
UITableView

import UIKit

class CardDataSource: NSObject, UITableViewDataSource {

    //MARK:- Property
    var medialObjects: [MediaCardObject]?
    let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    var viewController: AddNewVC?

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return medialObjects?.count ?? 0
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let obj = medialObjects![indexPath.row]

        let cell = tableView.dequeueReusableCell(withIdentifier: "MediaTextTableViewCell") as! MediaTextTableViewCell

        cell.btnDelete.tag = indexPath.row
        cell.btnDelete.addTarget(self, action: #selector(AddNewVC.deleteItem(sender:)), for: .touchUpInside)
        cell.tfCardText.text = obj.path
        cell.tfCardText.tag = indexPath.row
        cell.tfCardText.returnKeyType = .done
        cell.tfCardText.delegate = viewController
        cell.selectionStyle = .none
        return cell
    }
}
在我的
UITableView
上加载数据很好,但问题是当我单击“删除”按钮时,它崩溃并显示

***由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因:'-[MediaCards.CardDataSource deleteItemWithSender::发送到实例的选择器无法识别 0x600003394cc0'

我也试过了

cell.btnDelete.addTarget(self, action: #selector(viewController?.deleteItem(sender:)), for: .touchUpInside)
以下是
AddNewVC

//MARK:- Delete
@objc func deleteItem(sender: UIButton) {

    let selectedIndex = sender.tag
    deleteObjectIndexPath = IndexPath(row: selectedIndex, section: 0)
    confirmDelete()
}
AddNewVC
类中

var tblDataSource = CardDataSource()

override func viewDidLoad() {
    super.viewDidLoad()

    tblDataSource.viewController = self
    tblMediaCards.dataSource = tblDataSource

    if forEdit {
        let cards = mediaObject?.cards?.allObjects as! [MediaCard]
        for obj in cards {
            let mediaCardObj = MediaCardObject.init(type: obj.type ?? "", path: obj.path ?? "", index: Int(obj.index))
            self.medialObjects.append(mediaCardObj)
        }

        medialObjects = medialObjects.sorted(by: { $0.index! < $1.index! })
        tblDataSource.medialObjects = medialObjects

        self.tblMediaCards.reloadData()
    }
}
var tblDataSource=CardDataSource()
重写func viewDidLoad(){
super.viewDidLoad()
tblDataSource.viewController=self
tblMediaCards.dataSource=tblDataSource
如果forEdit{
让cards=mediaObject?.cards?.AllObject为![MediaCard]
用于卡中的obj{
让mediaCardObj=MediaCardObject.init(类型:obj.type??,路径:obj.path??,索引:Int(obj.index))
self.medialObjects.append(mediaCardObj)
}
medialObjects=medialObjects.sorted(按:{$0.index!<$1.index!})
tblDataSource.medialObjects=medialObjects
self.tblMediaCards.reloadData()
}
}
但它仍然因为同样的原因崩溃。尽管代理工作正常。

目标错误:

cell.btnDelete.addTarget(self, action: #selector(AddNewVC.deleteItem(sender:)), for: .touchUpInside)
方法
AddNewVC.deleteItem(发件人:)
不是
self
的一部分,而是另一个类成员的一部分。尝试:

cell.btnDelete.addTarget(self.viewController, action: #selector(AddNewVC.deleteItem(sender:)), for: .touchUpInside)

为了安全起见,我宁愿在同一个viewcontroller中有一个target方法,然后调用datasource/subviewcontroller方法

deleteitem方法在哪里?你能给我们看看吗?当然。问题更新你是对的。我错过了。谢谢你的帮助。:)