【问题标题】:Calling function from another class [closed]从另一个类调用函数[关闭]
【发布时间】:2012-12-25 20:06:30
【问题描述】:

我正在 Xcode 中开发一个应用程序,我目前正在尝试访问一个单独的类并在那里调用一个函数。


发送消息的代码

-(IBAction) reloadButton:(id)sender
{
    RootViewController *theInstance = [[RootViewController alloc] initWithNibName:@"MainWindow" bundle:nil];
    [theInstance reloadTableView];
}

调用方法

.h 文件

-(void) reloadTableView;

.m 文件

-(void)reloadTableView
{
    [self.tableView reloadData];
}

每当我构建时,都没有错误。但是当我运行应用程序并按下“reloadButton”时,它会崩溃并在该行显示“程序收到信号:SIGABRT”:

[self.tableView reloadData];

可能是什么问题,我将如何解决这个问题?

【问题讨论】:

  • c、c++ 和 c# 标签证明,你不知道。您使用的语言是 Objective-C。也许你应该从头开始。 developer.apple.com/library/ios/#referencelibrary/…
  • 哈哈哈我在做什么。我刚刚输入 c 并且这些标签出现了。不过还是谢谢你。我会修复它
  • Objective-C 以 «O» 开头
  • 谢谢 vikingosegundo
  • 老实说:从头开始。

标签: objective-c ios cocoa-touch function


【解决方案1】:

我猜 RootViewController 没有正确初始化它的 tableView。在调试器中,尝试访问 self.tableView 中的值。

【讨论】:

  • 好吧,我尝试在 RootViewController 类中调用相同的函数,它运行良好。所以基本上,我向 RootViewController 添加了一个 reloadButton 并使用 [self reloadTableView] 调用该函数。
  • 上述代码中的 reloadButton 方法创建了一个新的 RootViewController,它可能缺少一些其他情况下发生的初始化。
  • -initWithNibName 是否调用 -viewDidLoad?因为-viewDidLoad 将是一个常见的地方来初始化诸如`tableView'之类的东西。
【解决方案2】:

您的班级实际上是否用作数据源?否则,调用:

self.tableView.dataSource = self;

【讨论】:

  • 是的。我认为问题与我在函数中使用“self”这一事实有关。看,如果我在本地访问它,它可以正常工作,但是当我尝试从另一个类访问它时,它会崩溃。
  • 好的。也许链接中问题的答案可以通过使用 NSNotification 为您提供帮助:stackoverflow.com/questions/2148948/…
  • 像魅力一样工作!谢谢杰斯珀!
  • 没问题!很高兴它有帮助!
【解决方案3】:

RootViewController 对象看起来并没有被使用。

您正在分配 - 在方法中初始化它,但没有对它做任何事情 - 没有在任何地方添加它的视图,也没有设置数据源或委托。

并且在方法结束时它超出了范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    相关资源
    最近更新 更多