在@implementation中使用'self'

我试图通过使用TriggerIO原生插件在iPodMusicPlayer 之上播放语音audio,但是我无法访问self对象。

 #import "alert_API.h" @implementation alert_API + (void)play:(ForgeTask*)task text:(NSString *)filename { NSURL* url = [[NSBundle mainBundle] URLForResource:@"Rondo_Alla_Turka_Short" withExtension:@"aiff"]; NSAssert(url, @"URL is valid."); NSError* error = nil; /* ERROR: /Users/gsquare567/forge-workspace/plugins/audio/inspector/ios-inspector/ForgeModule/alert/alert_API.m:45:13: Member reference type 'struct objc_class *' is a pointer; maybe you meant to use '->'? */ self->player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; /* ERROR: /Users/gsquare567/forge-workspace/plugins/audio/inspector/ios-inspector/ForgeModule/alert/alert_API.m:45:13: Incomplete definition of type 'struct objc_class' */ if(!self.player) { NSLog(@"Error creating player: %@", error); } [task success:nil]; } @end 

该属性在alert_API.h定义:

 #import <Foundation/Foundation.h> #import <AVFoundation/AVFoundation.h> @interface alert_API : NSObject @property (nonatomic, strong) AVAudioPlayer* player; + (void)play:(ForgeTask*)task text:(NSString *)filename; @end 

我需要在这里做什么才能在我的API中访问player属性?

谢谢!

您的play:text:方法是静态的,这意味着self不会引用具有该属性的实例,而是alert_API的类对象。 您可以将您的方法更改为实例方法( - (void)而不是+ (void) ):

 - (void)play:(ForgeTask*)task text:(NSString *)filename; 

或者如果你想保持静态的方法,你将不得不实现一个返回一个玩家单身的静态方法:

 + (AVAudioPlayer *)playerInstance; 

然后使用[alert_API playerInstance]从您的方法访问播放器。