繁体   English   中英

实施协议时遇到问题

[英]Problems implementing a protocol

我正在开发游戏,并且有按模态推送的设置视图。 我想要在该视图中关闭音乐时,停止背景音乐。 我正在使用协议(我正在使用自动引用计数):

游戏

#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>{
     ...
 }

游戏

   -(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的引用,我认为那是我的方法changeSettings在game.h中从未调用过。 我想念什么?

我建议作为一种良好的编程习惯,以大写的方式命名类,即:“游戏”而不是“游戏”,以及您的协议:“ SettingsChanger”而不是“ settingsChanger”。 您的方法命名约定似乎也需要改进,只需花费30分钟的时间,然后阅读Apple的“ Cocoa Cocoa Guidelines for Cocoa” 链接到“ Cocoa Cocoa Guidelines for Cocoa文档”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM