私はゲームを開発しており、モーダルでプッシュされた設定ビューを持っています。私はその見解で音楽をオフにして、バックグラウンドミュージックを止めたいです。私は(私は自動参照カウントを使用しています)プロトコルを使用しています:プロトコルを実装する際の問題
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が呼び出されないという私の考え方です。私は何が欠けていますか?
'設定'委譲を 'game '。 –
あなたのコメントありがとう、私は設定ビューを起動する前にこれを置くことを忘れていた:settingsScreen.settingsDelegate = self; –
FWIW、あなたは、あなたの代議員が '強い'を宣言することはほとんどありません。ほぼ普遍的に、あなたは参照サイクルを避けるために「弱い」と宣言する必要があります。 – dasblinkenlight