【问题标题】:declare and access a BOOL class method声明和访问 BOOL 类方法
【发布时间】:2012-12-12 09:36:45
【问题描述】:

Mehul has defined this method.

+(BOOL)isCameraDeviceAvailable
{
    BOOL isCameraAvailable=NO;
    if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    {
        if([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront] || [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear])
            isCameraAvailable = YES;
    }
    return isCameraAvailable;
}

但我无法正确声明它并收到错误

Instance method '-isCameraDeviceAvailable' not found (return type defaults to 'id')

当我如下声明时。

+ (BOOL)isCameraDeviceAvailable; 

然后这样使用它

if([self isCameraDeviceAvailable]){
 } 

我想我需要在不同的地方或以不同的方式声明它。你能告诉我怎么做吗?

【问题讨论】:

    标签: objective-c xcode class methods


    【解决方案1】:
    +(BOOL)isCameraDeviceAvailable
    

    该行开头的+ 使它成为一个类方法,这意味着您只能将isCameraDeviceAvailable 发送给。如果您想将该方法与该类的 instance 一起使用,则需要使用 - 而不是 + 来声明它:

    -(BOOL)isCameraDeviceAvailable
    

    或者,正如 Kashiv 解释的那样,您可以通过将isCameraDeviceAvailable 发送给类来使用您拥有的方法。请参阅Objective-C Classes Are also Objects 了解更多信息。

    【讨论】:

      【解决方案2】:
      [self isCameraDeviceAvailable]
      

      实例方法调用,而不是方法调用

      你必须像这样使用它:

      [MyClass isCameraDeviceAvailable]
      

      【讨论】:

      • 我正在使用来自link 的脚本,其中没有 MyClass。我想这就是作者所说的“在你给我废话之前在主线程中执行此操作之前,我知道。不要在主线程上执行这些操作。”
      • 不——这与线程无关。您应该真正了解类方法和实例方法之间的区别。
      • "是实例方法调用,不是类方法调用。"除非,当然,self 是一个类对象,即如果它在一个类方法中
      猜你喜欢
      • 2011-06-04
      • 2011-07-01
      • 2014-11-05
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多