【问题标题】:Connecting button programmatically XCode9, Objective-C, OSX以编程方式连接按钮 XCode9、Objective-C、OSX
【发布时间】:2017-10-19 17:11:41
【问题描述】:

我在 OSX、XCode9、Objective C 上。

我有一个在 IB 中布局的 viewController。该视图包含一个连接到相应视图控制器的按钮

SHTourViewController.h

@property (weak) IBOutlet SHStandardButton *closeButton;
// SHStandardButton is a subclass from NSBUtton.

视图控制器被另一个类中的代码实例化(我需要从其他类中实例化这个视图控制器,因为我需要不止一次)。

// Get instance of viewController
SHTourViewController* tourViewController = [storyBoard instantiateControllerWithIdentifier:@"tourViewController"]; 

现在在我的 viewController 的 viewDidLoad 方法中,我喜欢连接按钮动作和目标:

SHTourViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.closeButton setAction:@selector(closeButtonClicked:)];
    [self.closeButton setTarget:self];
}

- (void)closeButtonClicked:(id)sender {
NSLog(@"CLOSE!");
}
}

当我单击按钮时,应用程序崩溃(线程 1:EXC_BAD_ACCESS)。我在这里找不到我正在做的错误。

任何帮助表示赞赏。

【问题讨论】:

  • 请从控制台提供实际的完整崩溃报告。
  • 我附上了一张图片。为什么是-1?
  • 如果在 Objective-C 异常上设置断点,Xcode 应该停止在实际错误而不是 NSApplicationMain。这会给你一行代码和一个有用的堆栈跟踪。
  • 因为你只是在挥手;您没有显示问题的真正原因。仅仅说“它崩溃了”并不能提供任何信息。你让我们猜测,那有什么意义呢?

标签: objective-c xcode9 nsbutton


【解决方案1】:

你没有提供足够的信息来说明你在做什么。但是,就目前而言,您获得错误访问权限的事实表明某些重要对象已经过早地消失在一阵烟雾中。我的猜测是该对象是self,并且问题与代码之后这行:

SHTourViewController* tourViewController = 
    [storyBoard instantiateControllerWithIdentifier:@"tourViewController"]; 

您正在获取此视图控制器的全新实例,但是您没有将其视图正确地放入视图层次结构中,并且视图控制器本身没有放入视图控制器层次结构中,因此视图控制器(我猜)被释放.

但是您没有向我们展示相关代码,所以这只是一个猜测。

【讨论】:

  • 谢谢!我不想“挥手”-我只是说...感谢任何帮助->感谢异常断点和您的建议,我发现了错误。 viewController 被释放是因为它没有强引用。添加后,效果很好。
  • 但这正是我的建议。如果我的回答是正确的,接受它不是正确的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 2013-11-08
  • 2017-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多