在@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]
从您的方法访问播放器。