Objective C class 方法错误“使用未声明的标识符”

Objective C class method error ''Use of undeclared identifier"

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

-(void)RLog(NSString*)statement;

但样本建议使用:

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

这似乎可行,让我用 'RLog(@"My message")' 调用它,但是以这种方式使用它时,该方法会忽略 class 变量,而且我似乎无法使用 '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

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

提前致谢。

等离子

void RLog(NSString *format,...)

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

C 函数是全局的和独立的。这里没有 self,与 Logging 的 enabled 也没有关系。就此功能而言,Logging class 可能根本不存在。

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

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

@implementation Logging
    
id  thisClass;

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

我现在可以从 C 函数内部调用日志记录中的方法 class 使用:

[thisClass log:@"Testing"];

无需将“self”作为参数发送,我已将需要局部变量的其余代码移至我的 'log' 方法中,只需使用 C 方法调用它即可一种简化的方法。

等离子