我有一个自定义的 UITableViewController,我试图用它来管理 UITableView。我的代码在包含 UITableView 的主 UIViewController 中的流程如下:
_messagesTableVC = [[AllMessagesTableViewController alloc] init];
_allMessageTableView.dataSource = _messagesTableVC;
_allMessageTableView.delegate = _messagesTableVC;
[_allMessageTableView reloadData];
AllMessagesTableViewController
自定义 UITableViewController 类已初始化,它执行所需的任何处理,我将 _allMessageTableView
(UITableView)的委托(delegate)设置为我的自定义类。
当我运行此代码时,程序的行为就像自定义类不存在但没有发生错误一样。似乎没有调用自定义类中的任何方法,没有 init,没有 initWithCoder,什么都没有(我已经设置了断点并检查了;))。
正如您在下面的屏幕截图中看到的,我在自定义类中的自定义方法 refreshData
之后设置了一个断点,我设置为返回 YES
。我将 refreshData
的返回值分配给一个局部变量 test
。
在调试器中:
_messagesTableVC
自定义类似乎不是 nil。 test
似乎不存在。[_messagesTableVC refreshData]
时,它显示 error: Execution was interrupted, reason: Attempted to dereference an invalid ObjC Object or send it一个无法识别的选择器。
进程已经返回到表达式求值前的状态。
。那么 _messagesTableVC
实际上是 nil 吗??是什么导致了这些问题,或者 GDB 正在玩游戏?这是一个消息应用程序扩展,以防万一。谢谢。
更新:这是自定义类 init 和 refreshData 的代码
- (instancetype)init {
self = [super init];
if (!self)
return nil;
return self;
}
- (BOOL)refreshData {
return YES;
}
更新 2:我创建了一个空白的工作项目并将确切的文件复制粘贴到我的原始项目中(因为它是大型 iOS 应用程序的 iMessage 扩展)。事实证明,即使在我清理了项目并更改了 UITableView 委托(delegate)以提供不同的文本之后,Xcode 仍在运行应用程序的旧版本。
我过去为同一个项目创建了一个消息扩展,并删除了目标,同时将文件保留在项目中。当我将 Messages Extension 重新添加到项目中时,Xcode 继续运行旧版本的应用程序。 我通过以下方式解决了 Xcode 运行旧版本应用程序的问题:
关于ios - 未调用 ObjC 类方法。 GDB玩游戏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39887080/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |