как вызвать метод, определенный в другом классе - PullRequest
0 голосов
/ 06 декабря 2010

Привет У меня есть класс с именем 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 ]

1 голос
/ 06 декабря 2010

Конечно, ваш код успешно компилируется. Но вы знаете, что? В вашем коде есть опечатка, которая вызывает сбой вашей программы. Никогда не думайте, что ваш код не содержит опечаток только потому, что он успешно компилируется.

В вашем 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?
0 голосов
/ 06 декабря 2010

"но на этом этапе мое приложение завершает работу (вылетает)"

Нам нужно знать больше об этом, чтобы помочь вам в этом.

В консоли XCode это должно выдавать сообщения, которые сузили бы в чем проблема. Также будет полезна трассировка стека.

Мое общее предположение состоит в том, что ваш локальный экземпляр root не определен, поэтому вы вызываете нераспознанный селектор для этого объекта. Но без дополнительной помощи с консоли это полное предположение.

0 голосов
/ 06 декабря 2010

Ваш код неполон, и без контекста действительно трудно сказать, в чем может быть ошибка.Однако:

  • Вы не определили issoundon где-либо
  • , где вы построили свой корневой объект?в конструкторе интерфейсов?
  • почему это подкласс UIView?
  • является синхронным AudioServicesPlaySystemSound?

Но в основном, я думаю, что ваша проблема здесь:

  • Почему вы ожидаете, что сможете воспроизвести файл с именем (nil).wav?

Я предлагаю вам предоставить дамп и журнал ошибок, чтобы помочь людям ответить на этот вопрос.вопрос.


См. этот вопрос: воспроизведение фонового звука на iphone

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...