我正在尝试通过制作 TriggerIO native 插件在 iPodMusicPlayer
上 播放语音音频,但是我无法访问 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]
从您的方法访问播放器。
关于ios - 在 @implementation 中使用 'self',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15951441/