在快速弱自我中调用目标 C 块总是零

Calling Objective C block in swift weak self always nill

提问人:Arthur 提问时间:6/8/2021 更新时间:6/8/2021 访问量:144

问:

我在 Objective C .h 文件中有一个块属性 我正在使用此代码在 swift 文件中创建目标 C 控制器的变量

let viewController = ViewController(nibName: "ViewController", bundle: nil)
        
viewController.onCellPressed = { [weak self] cellModel in
    guard let cellModel = cellModel else { return }
    self?.openDetails(cellModel)
} 

这是区块 var 的声明

@property (nonatomic, copy) void (^onCellPressed)(CellModel* model);

我正在用这段代码运行这个块

self.onCellPressed([_photos objectAtIndex:indexPath.row]);

问题是里面[weak self]

    { [weak self] cellModel in
        guard let cellModel = cellModel else { return }
        self?.openDetails(cellModel)
    } 

总是nil

如何在 swift 文件中的块内使用弱自我?

iOS Swift 闭包 Objective-C-块

评论

0赞 Larme 6/8/2021
该块甚至被调用了吗?只看到这样的代码,我想知道哪个似乎是本地变量不会过早发布。viewController
0赞 Arthur 6/8/2021
是的,它打电话。此控制器是在协调器中创建的,因此它必须在内存中。此外,如果我在块内使用强大的自我,它会像我预期的那样工作
0赞 Larme 6/8/2021
“这个控制器是在协调器中创建的,所以它必须在内存中”这取决于,协调器是否也保存在内存中?它也不是本地变量吗?你有可重现的示例应用程序吗?
0赞 Santosh 6/9/2021
如果可以共享可运行的代码进行测试,那将会很有帮助。

答: 暂无答案