【问题标题】:Objective C class method error ''Use of undeclared identifier"目标 C 类方法错误“使用未声明的标识符”
【发布时间】:2020-12-13 23:06:58
【问题描述】:

希望这不是一个荒谬的问题,因为我是一名自学成才的程序员,但我发现了一些看起来可以帮助我做我想做的事情的代码。基本上我想在我的一个应用程序中增强 NSLog() 函数,并且想以与 NSLog() 相同的方式调用我的方法。 google 'void function()' 非常困难,因为似乎没有什么相关的,我习惯了这样构造的方法:

-(void)RLog(NSString*)statement;

但示例建议使用:

void RLog(NSString *statement,...);

这似乎可行,让我用'RLog(@“My message”)'调用它,但是以这种方式使用它,该方法会忽略类变量,而且似乎我也不能使用'self'...... .

Logging.h

#import <UIKit/UIKit.h>
@import Foundation.NSString;

@interface Logging : NSObject

@property (nonatomic) BOOL enabled;

void RLog(NSString *statement,...);

@end

Logging.m

#import "Logging.h"

@implementation Logging

@synthesize enabled;

void RLog(NSString *format,...) {

     /* something that uses 'enabled' throws 'Use of undeclared identifier enabled' */

     /* something else that uses '[[self class] session]' throws 'Use of undeclared identifier self' */

}

@end

希望我已经包含了足够的信息来解释我的问题,并且没有删除太多以使其难以理解!

提前致谢。

等离子

【问题讨论】:

    标签: objective-c xcode self


    【解决方案1】:
    void RLog(NSString *format,...)
    

    ... 不是 Objective-C 方法;它只是一个 C 函数

    C 函数是全局且独立的。这里没有self,并且与Logging 的enabled 没有任何联系。就这个函数而言,Logging 类还不如根本不存在。

    【讨论】:

    • 好吧,所以如果我希望它是有条件的,我需要在调用它时发送条件吗?我不熟悉普通的 C。我希望能够调用它并让它基于一个布尔值表现不同,我不想传入它。
    • 是的,C 函数就是这样。看看 Cocoa 中的任何 C 函数,你必须将 everything 发送进去。(例如,developer.apple.com/documentation/coregraphics/…)你可以将 Logging 对象传递给 函数,如果它充满了您需要的属性,但 C 函数在任何意义上都不在 Logging 对象“内部”。
    【解决方案2】:

    经过更多调查,我找到了使用here 信息解决此问题的方法。

    我添加了一个名为 thisClass 的类变量,然后在我的类初始化阶段将“self”分配给它。

    @implementation Logging
        
    id  thisClass;
    
    - (id) init
    {
        if (self = [super init])
        {
            thisClass = self;
        }
        return self;
    }
    

    现在我可以从 C 函数内部调用 Logging 类中的方法:

    [thisClass log:@"Testing"];
    

    无需将“self”作为参数发送,我已将需要局部变量的其余代码移至我的“log”方法中,并简单地使用 C 方法以简化的方式调用它。

    等离子

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-13
      • 2020-05-09
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      相关资源
      最近更新 更多