如何调用另一个类中定义的方法

时间:2010-12-06 13:32:20

标签: objective-c

您好     我有一个名为root的类:

root.h: -

#import "UIKit/UIKit.h"
#import "AVFoundation/AVFoundation.h"
#import "AudioToolbox/AudioToolbox.h"

@interface root : UIView {


}
+(void)somefunction:(BOOL) sf;
@end

在root.m中somefunction的定义如下

-(void)somefunction:(BOOL) sf {
 //AVAudioPlayer *myExampleSound; //this variable can be named differently

 if ( issoundon==TRUE) {     
   NSString *path =[[NSBundle mainBundle] pathForResource:"bg" ofType:@"wav"];
   SystemSoundID soundID;
   AudioServicesCreateSystemSoundID(
     (CFURLRef) [NSURL fileURLWithPath:path], &soundID);
   AudioServicesPlaySystemSound(soundID);
}
else{
  NSString *path =[[NSBundle mainBundle] pathForResource:nil ofType:@"wav"];
  SystemSoundID soundID;
  AudioServicesCreateSystemSoundID(
    (CFURLRef) [NSURL fileURLWithPath:path], &soundID);
  AudioServicesPlaySystemSound(soundID);
}

现在我已经在另一个班级导入了root.h,我正在调用“somefunction”,如下所示

bool abc=true;
[root somefunction:true];

但此时我的应用程序终止(崩溃)。

基本上我正在尝试将背景音乐设置到我的应用程序(随着游戏的开始),并且在游戏中间我允许用户切换声音。(即使我在调用代理中的函数也崩溃了图。)

请告诉我发生了什么错误因为我的代码编译正确(尽管有一些警告)。

3 个答案:

答案 0 :(得分:1)

当然,您的代码编译成功。但你知道吗?您的代码中存在拼写错误导致程序崩溃。 永远不要因为编译成功而假设您的代码没有拼写错误。

root.m文件中,您有:

-(void)somefunction:(BOOL) sf {

它应该是+,而不是-,就像在您的标头文件中一样:

+(void)somefunction:(BOOL) sf {

C类型bool和Objective-C类型BOOL之间可能存在差异,但我对此不太确定:

bool abc=true;            // Shouldn't this be BOOL abc = YES, and
[root somefunction:true]; // shouldn't you be passing abc here?

答案 1 :(得分:0)

您的代码不完整,没有上下文,很难说出错误是什么。但是:

  • 您尚未定义issoundon任何地方
  • 你在哪里构建了你的根对象?在界面构建器中?
  • 为什么它是UIView的子类?
  • 是AudioServicesPlaySystemSound同步吗?

但主要是,我认为你的问题在这里:

  • 为什么您希望能够播放名为(nil).wav的文件?

我建议您提供崩溃转储和错误日志,以帮助人们回答此问题。


请参阅此问题:playing background audio on iphone

答案 2 :(得分:0)

“但此时我的应用终止(崩溃)”

我们需要了解更多信息,以帮助您解决这个问题。

在Xcode控制台中,它应该发出可以缩小问题范围的消息。堆栈跟踪也很有用。

我的总猜测是你的本地root实例未定义,因此你在该对象上调用一个无法识别的选择器。但是如果没有控制台的更多帮助,那就完全可以猜到了。