以编程方式连接按钮XCode9,Objective-C,OSX

以编程方式连接按钮XCode9,Objective-C,OSX

问题描述:

im on OSX,XCode9,Objective C.以编程方式连接按钮XCode9,Objective-C,OSX

我有一个viewController布局在IB。该视图包含连接到对应的viewController

SHTourViewController.h

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

的按钮的视图控制器得到由代码在另一个类中instantinated(我需要原因我需要它从其他类instantinate此的viewController不止一次)。

// 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)。我在这里找不到我犯的错误。

任何帮助表示赞赏。

enter image description here

+0

请提供控制台的实际完整的崩溃报告。 – matt

+0

我附上了一张图片。为什么是-1? –

+0

如果您在Objective-C异常中设置断点,则Xcode应停止在实际错误而不是NSApplicationMain。这会给你一行代码和一个有用的堆栈跟踪。 –

您没有提供关于你在做什么的足够信息。但是,就目前而言,事实表明,您正在获取“无法访问”的事实表明,一些重要对象在一阵烟雾中过早消失。我的猜测是,该对象是self,并且该问题与代码后这一行:

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

你获得这个视图控制器的一个全新的实例,但是,你不能获得其观点,正确地进入视图层次结构和视图控制器本身到视图控制器层次结构中,所以视图控制器(我猜)被释放。

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

+0

谢谢!我不想“挥手” - 我只是说...任何帮助表示赞赏 - >并感谢异常断点和你的建议,我发现了错误。 viewController被取消分配,因为它没有强大的参考。一旦添加,它工作得很好。 –

+0

但这正是我所建议的。如果我的回答是对的,接受它会不会是正确的? – matt