【问题标题】:NSButton IBAction Crash unrecognized selectorNSButton IBAction 崩溃无法识别的选择器
【发布时间】:2016-07-05 07:27:20
【问题描述】:

遇到一个简单的问题,但不太确定是什么原因造成的。将 NSButton 链接到 ViewController xib。该属性被引用,然后我将 IBAction 链接到视图控制器视图。每当我按下带有无法识别的选择器消息的按钮时,我都会崩溃。我知道我做错了什么,但在 iOS 上这是非常标准的。

代码如下:

#import "AppDelegate.h"

@interface AppDelegate ()

@property (weak) IBOutlet NSWindow *window;
@end

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application
    IPVLocationViewController *mainViewController = [[IPVLocationViewController alloc]initWithNibName:@"IPVLocationViewController" bundle:nil];
    self.window.contentView = mainViewController.view;
}

- (void)applicationWillTerminate:(NSNotification *)aNotification {
    // Insert code here to tear down your application
}

@end

#import "MainViewController.h"

@interface MainViewController ()
@property (weak) IBOutlet NSButton *mainButton;

@end

@implementation MainViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do view setup here.
}

- (IBAction)mainClick:(id)sender {
    NSLog(@"THE BUTTON WAS CLICKED");
}


@end

【问题讨论】:

    标签: objective-c macos cocoa-touch


    【解决方案1】:

    在您的 Nib 中,您的视图控制器实例的类型似乎是 NSViewController 而不是 MainViewController。

    因此,在您的 Nib(或故事板)中选择视图控制器,并将其类型更改为 MainViewController。

    当然,如果此视图控制器不是从 nib 或情节提要加载的,那么只需检查您创建它的位置并确保您创建了正确类的实例。

    【讨论】:

    • 在 Nib 中,文件所有者被标记为 MainViewController。我将添加我的 Nib 外观的图像。图像也显示了关系。 MainViewController 的子类被标记为 NSViewController。
    • 您的连接是否正确连接。如果是这样,我会坚持让您再次检查插座连接,并寻找未连接的按钮。
    • 我添加了一个屏幕截图,显示了 MainViewController 类型的 [self class] 日志。据我所知,一切都是相互关联的。
    【解决方案2】:

    解决了:

    post 中接受的答案帮助了我:

    需要在 AppDelegate 中保存对视图控制器的引用。

    @interface AppDelegate ()
    
    @property (nonatomic, strong) MainViewController *mainViewController;
    
    @property (weak) IBOutlet NSWindow *window;
    @end
    
    @implementation AppDelegate
    
    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
        // Insert code here to initialize your application
        self.mainViewController = [[MainViewController alloc]initWithNibName:@"MainViewController" bundle:nil];
        self.window.contentView = self.mainViewController.view;
    
    }
    
    - (void)applicationWillTerminate:(NSNotification *)aNotification {
        // Insert code here to tear down your application
    }
    
    @end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多