gpt4 book ai didi

objective-c - 实现协议(protocol)的问题

转载 作者:行者123 更新时间:2023-11-29 13:42:35 24 4
gpt4 key购买 nike

我正在开发一款游戏,我有一个以模态方式推送的设置 View 。我想如果我在那个 View 中关闭音乐,停止背景音乐。我正在使用一个协议(protocol)(我正在使用自动引用计数):

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

最佳答案

我建议用大写字母命名您的类,这是一种良好的编程习惯,即:“Game”而不是“game”,以及您的协议(protocol):“SettingsChanger”而不是“settingsChanger”。您的方法命名约定似乎也需要一些改进,只需花 30 分钟时间阅读 Apple 的“Cocoa Guidelines For Cocoa”link to the "Cocoa Guidelines For Cocoa document"

关于objective-c - 实现协议(protocol)的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8682991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com