2011-12-30 14 views
1

私はゲームを開発しており、モーダルでプッシュされた設定ビューを持っています。私はその見解で音楽をオフにして、バックグラウンドミュージックを止めたいです。私は(私は自動参照カウントを使用しています)プロトコルを使用しています:プロトコルを実装する際の問題

game.h

#import <UIKit/UIKit.h> 
#import "AVFoundation/AVFoundation.h" 
#import "stackButton.h" 
#import "tvr_AppDelegate.h" 

@protocol settingsChanger <NSObject> 

-(void)changeSettings:(int)soundVal musicSetting:(int)musicVal; 

@end 
@interface game : UIViewController <UIAlertViewDelegate, settingsChanger>{ 
    ... 
} 

game.m

-(void)changeSettings:(int)soundVal musicSetting:(int)musicVal{ 
    if (musicVal == 1) { 
     [self playMusic]; 
    }else{ 
     [audioPlayer stop]; 
    } 

settings.h

#import <UIKit/UIKit.h> 

@protocol settingsChanger; 

@interface settings : UIViewController{ 
    id<settingsChanger> settingsDelegate; 
} 

@property (nonatomic, strong) id<settingsChanger> settingsDelegate; 

-(IBAction)updateMusicSetting; 

@end 

settings.m

-(IBAction)updateMusicSetting{ 
    tvr_AppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
    if (swMusic.on) { 
     [delegate updateMusicSetting:1]; 
     [settingsDelegate changeSettings:0 musicSetting:1]; 
    } 
    else { 
     [delegate updateMusicSetting:0]; 
     [settingsDelegate changeSettings:0 musicSetting:0]; 
    } 
} 

マイIBActionはUISwitchによってトリガされます。 id settingsDelegateがメモリ0x0を参照することを除いて、すべてうまくいっています。これは、game.hでchangeSettingsが呼び出されないという私の考え方です。私は何が欠けていますか?

+3

'設定'委譲を 'game '。 –

+0

あなたのコメントありがとう、私は設定ビューを起動する前にこれを置くことを忘れていた:settingsScreen.settingsDelegate = self; –

+0

FWIW、あなたは、あなたの代議員が '強い'を宣言することはほとんどありません。ほぼ普遍的に、あなたは参照サイクルを避けるために「弱い」と宣言する必要があります。 – dasblinkenlight

答えて

1

「ゲーム」ではなく「ゲーム」とプロトコルでも、「settingsChanger」ではなく「SettingsChanger」というように、クラス名を大文字で指定することをおすすめします。あなたのメソッドの命名規則も少し改善する必要があるようです.Applesの "Cocoa Guidelines for Cocoa"を参照してください。link to the "Cocoa Guidelines For Cocoa document"

+0

私はあなたのsugestion、ありがとうと感謝します。 –

関連する問題