不调用ObjC类方法。 GDB玩游戏?​​

时间:2016-10-06 03:33:33

标签: ios objective-c uitableview uiviewcontroller gdb

我有一个自定义的UITableViewController,我试图用它来管理UITableView。包含UITableView的主UIViewController中的代码流程如下所示:

    _messagesTableVC = [[AllMessagesTableViewController alloc] init];

    _allMessageTableView.dataSource = _messagesTableVC;
    _allMessageTableView.delegate = _messagesTableVC;

    [_allMessageTableView reloadData];

初始化AllMessagesTableViewController自定义UITableViewController类,它执行任何所需的处理,并将_allMessageTableView(UITableView)的委托设置为我的自定义类。

当我运行此代码时,程序就像自定义类不存在一样,但不会发生错误。似乎自定义类中的NO方法被调用,没有init,没有initWithCoder,没有(我已设置断点并检查;))。

正如您在下面的屏幕截图中看到的,我在自定义类refreshData之后设置了一个断点,我设置为返回YES。我将refreshData的返回值分配给局部变量test

在调试器中:

  1. _messagesTableVC自定义类似乎不是零。
  2. test似乎不存在。
  3. 此处未显示,但当我尝试在调试器中运行[_messagesTableVC refreshData]时,它会显示error: Execution was interrupted, reason: Attempted to dereference an invalid ObjC Object or send it an unrecognized selector. The process has been returned to the state before expression evaluation.。那么_messagesTableVC实际上是零吗?
  4. screenshots

    可能导致这些问题的原因还是GDB玩游戏?这是一个消息应用程序扩展,以防万一。感谢。

    更新:以下是自定义类init和refreshData的代码

    - (instancetype)init {
        self = [super init];
        if (!self)
            return nil;
        return self;
    }
    
    - (BOOL)refreshData {
        return YES;
    } 
    

    Update2:我创建了一个空白的工作项目,并将确切的文件复制粘贴到我的原始项目中(因为它是一个大型iOS应用程序的iMessage扩展)。事实证明,即使我清理了项目并更改了UITableView委托以提供不同的文本,Xcode仍在运行应用程序的旧版本。 more

1 个答案:

答案 0 :(得分:0)

我过去为同一个项目创建了一个消息扩展,删除了目标,同时保留了项目中的文件。当我将Messages Extension重新添加到项目中时,Xcode继续运行应用程序的旧版本。 我通过以下方式修复了Xcode运行旧版应用程序的问题:

  1. 全部清理
  2. 从项目中删除邮件扩展目标
  3. 将现有的Message Extension代码备份到项目外的目录。然后从项目中删除Messages app组和目录。
  4. 从项目中删除Messages Extension构建方案。
  5. 删除项目派生数据目录。
  6. 重新启动Xcode,在项目中创建新的Messages Extension目标,并导入已保存的代码。
相关问题