首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不兼容指针类型从“类”分配给“id<AVAudioPlayerDelegate>”

不兼容指针类型从“类”分配给“id<AVAudioPlayerDelegate>”
EN

Stack Overflow用户
提问于 2011-10-29 17:27:14
回答 2查看 14.3K关注 0票数 12

我有一个实现AVAudioPlayerDelegate协议的“实用程序”类。

这是我的Utility.h

代码语言:javascript
复制
@interface Utility : NSObject <AVAudioPlayerDelegate>
{
}

这是对应的Utility.m

代码语言:javascript
复制
@implementation Utility

static AVAudioPlayer *audioPlayer;

+ (void)playAudioFromFileName:(NSString *)name ofType:(NSString *)type withPlayerFinishCallback:(SEL)callback onObject:(id)callbackObject
{
    ... 
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: [self getResourceURLForName:name ofType:type] error: nil];
    audioPlayer.delegate = self; // this is the line that causes the Warning
    ...
}

我的iOS应用程序运行良好,但是在迁移到iOS 5和Xcode 4.2之后,编译器开始抛出这个警告,位于audioPlayer.delegate = self;行:

代码语言:javascript
复制
Incompatible pointer types assigning to id <AVAudioPlayerDelegate> from 'Class'

我怎么才能摆脱它?

EN

Stack Overflow用户

发布于 2013-08-19 14:02:34

当您不需要类的实例时,只需手动获得警告:

代码语言:javascript
复制
audioPlayer.delegate = (id<AVAudioPlayerDelegate>)self;

另一方面,请注意,如果您需要一个委托,这意味着您应该有一个类的实例作为一种良好的编码实践,而不是静态类。它可以很容易地成为一个辛格尔顿

代码语言:javascript
复制
static id _sharedInstance = nil;
+(instancetype)sharedInstance
{
    static dispatch_once_t p;
    dispatch_once(&p, ^{
        _sharedInstance = [[self alloc] init];
    });
    return _sharedInstance;
}
票数 7
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7940477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档