【问题标题】:Not known class method for selector OpenDevice选择器 OpenDevice 的未知类方法
【发布时间】:2015-07-24 00:08:11
【问题描述】:

我正在用 Objective-c 为 OSX 开发一个应用程序。

我写了一个第一类并尝试在我的 MainThread 中调用这个类。

构建成功但应用崩溃

DeviceManager.h

#import <Foundation/Foundation.h>

@interface DeviceManager : NSObject

+(void)DeviceManager:OpenDevice;

@end

DeviceManager.m

#import "DeviceManager.h"

@implementation DeviceManager

- (id)init{
    self = [super init];
    if(self){
        NSLog(@"Init");
    }
    return self;
}

+ (void)DeviceManager:OpenDevice {
    NSLog(@"Opening Device");
}

@end

main.m 正在调用它:

#import "DeviceManager.h"


int main(int argc, const char * argv[]) {
    [DeviceManager OpenDevice];
    return NSApplicationMain(argc, argv);
}

在构建时,我不知道选择器 OpenDevice 的类方法

谢谢 赛博

【问题讨论】:

  • 首先,每个帖子一个问题。二、异常和崩溃信息是什么?
  • @Josh,我在代码更改后更改了描述

标签: objective-c macos exception crash


【解决方案1】:
#import <Foundation/Foundation.h>

@interface DeviceManager : NSObject

+ (void) openDevice;

@end

DeviceManager.m

#import "DeviceManager.h"

@implementation DeviceManager

+ (void) openDevice {
    NSLog(@"Opening Device");
}

@end

main.m

#import "DeviceManager.h"

int main(int argc, const char * argv[]) {
    [DeviceManager openDevice];
    return NSApplicationMain(argc, argv);
}

以上对我有用。 DeviceManager:OpenDevice 是什么意思?因为除非它是一种定义方法的新方法,否则它就是胡言乱语。看起来您想要一个名为 openDevice 的设备管理器类方法...所以请使用 + (void) openDevice {...}

【讨论】:

  • + (void)DeviceManager:OpenDevice; 是一个名为DeviceManager: 的类方法,不返回任何内容并接受一个参数;参数名称为OpenDevice,其类型为id。一个合法的声明,但风格很糟糕。
  • 我认为它是合法的,因为它在没有警告的情况下编译,但很高兴知道为什么。谢谢。我想我应该考虑一下,并在向他们展示如何定义他们的意图之前解释定义的实际定义。
猜你喜欢
  • 2013-11-21
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多