AudioServicesCreateSystemSoundID和内存地址参数-如何传入属性?

AudioServicesCreateSystemSoundID和内存地址参数-如何传入属性?,ios,objective-c,audio,Ios,Objective C,Audio,我有一个方法AudioServicesCreateSystemSoundID,根据文档,它似乎需要传入一个内存地址(*outSystemSoundID) 从苹果的网站 OSStatus AudioServicesCreateSystemSoundID ( CFURLRef inFileURL, SystemSoundID *outSystemSoundID ); 当我在方法中创建一个本地对象时,我有这段代码。对象已正确分配到内存位置 这将返回代码为0的myTest(这

我有一个方法AudioServicesCreateSystemSoundID,根据文档,它似乎需要传入一个内存地址(*outSystemSoundID)

从苹果的网站

OSStatus AudioServicesCreateSystemSoundID (
   CFURLRef       inFileURL,
   SystemSoundID  *outSystemSoundID
);
当我在方法中创建一个本地对象时,我有这段代码。对象已正确分配到内存位置

这将返回代码为0的myTest(这是我想要的)

但这正是我想做的。(self.theSound我已设置为SystemSoundID属性)

这将返回myTest,错误代码为:4294967246(我不希望这样)


编译器将声音转换为

[self theSound]
其中
-(SystemSoundID)sound
是(自动合成的)getter方法 属性的值,该属性(默认情况下)从声音实例获取值 变数

因此,您不能获取“属性的地址”并将其传递给函数。 您可以改为传递实例变量的地址:

SystemSoundID myTest = AudioServicesCreateSystemSoundID
(
    (__bridge CFURLRef)(url), &self->_theSound
);
 SystemSoundID thisSoundID;
 SystemSoundID myTest = AudioServicesCreateSystemSoundID
 (
     (__bridge CFURLRef)(url), &thisSoundID
 );
 self.theSound = thisSoundID;
绕过属性访问器。但我建议使用临时的 变量替换为:

SystemSoundID myTest = AudioServicesCreateSystemSoundID
(
    (__bridge CFURLRef)(url), &self->_theSound
);
 SystemSoundID thisSoundID;
 SystemSoundID myTest = AudioServicesCreateSystemSoundID
 (
     (__bridge CFURLRef)(url), &thisSoundID
 );
 self.theSound = thisSoundID;

回答得好。您是否知道对“.”的引用。您不能获取“属性的地址”并将其传递给函数。您可以改为传递实例变量的地址..”?我隐约记得很久以前在什么地方读过这篇文章,但我不记得在哪里读过。我想再复习一下。提前感谢。这有助于成功创建对象。然而,它似乎不会在功能之外持续存在。如果我在函数中调用完全相同的方法,它就会工作。。。。除此之外,没有工作`编码音频服务播放系统声音(*(self.theSound));//下班后马上。但是,以下内容不适用于(void)playSound{NSLog(@“称为playSound”);AudioServicesPlaySystemSound(*(self.theSound));}@Fanydarmer:为什么
AudioServicesPlaySound(*(self.theSound))
?这不应该是
AudioServicesPlaySystemSound(self.theSound)
?我试过了,但得到了错误:“指向整数转换的指针不兼容…”@fanydarmer:可能是您将属性声明为
SystemSoundID*theSound
?它应该是
SystemSoundID theSound
。声音ID是一个简单的整数,而不是指针。