问题从另一个类访问变量
我写了下面的代码保存在另一类别后访问类变量:问题从另一个类访问变量
SettingsController.h
@interface SettingsController : NSObject
@property (nonatomic) BOOL isHighway;
@property (nonatomic) BOOL isToll;
@property (nonatomic) BOOL isVoiceNavigation;
@property (nonatomic) BOOL isVoiceCommand;
-(id)initWithHighway:(BOOL)_isHighway;
-(id)initWithToll:(BOOL)_isToll;
-(id)initWithVoiceNavigation:(BOOL)_isVoiceNavigation;
-(id)initWithVoiceCommand:(BOOL)_isVoiceCommand;
-(BOOL)isHighwayOn;
-(BOOL)isTollOn;
-(BOOL)isVoiceNavigationOn;
-(BOOL)isVoiceCommandOn;
@end
SettingsController.m
@implementation SettingsController
@synthesize isHighway,isToll,isVoiceNavigation,isVoiceCommand;
-(id)initWithHighway:(BOOL)_isHighway{
if ((self = [super init])) {
self.isHighway = _isHighway;
}
return self;
}
-(id)initWithToll:(BOOL)_isToll{
if ((self = [super init])) {
self.isToll = _isToll;
}
return self;
}
-(id)initWithVoiceNavigation:(BOOL)_isVoiceNavigation{
if ((self = [super init])) {
self.isVoiceNavigation = _isVoiceNavigation;
}
return self;
}
-(id)initWithVoiceCommand:(BOOL)_isVoiceCommand{
if ((self = [super init])) {
self.isVoiceCommand = _isVoiceCommand;
}
return self;
}
-(BOOL)isHighwayOn{
return self.isHighway;
}
-(BOOL)isTollOn{
return self.isToll;
}
-(BOOL)isVoiceNavigationOn{
return self.isVoiceNavigation;
}
-(BOOL)isVoiceCommandOn{
return self.isVoiceCommand;
}
@end
从我的SettingsViewController类,我初始化值如下:
SettingsController *settingsController = [[SettingsController alloc] initWithHighway:isHighways];
,并访问他们作为
BOOL isHighway = [settingsController isHighwayOn];
但是,如果我试图从另一个类访问这些变量,RouteViewController如下:
SettingsController *settingsController = [[SettingsController alloc] init];
BOOL isHighway = [settingsController isHighwayOn];
它总是给我0
,我从来没有得到1
。
任何人都可以请帮助我访问这些变量?
编辑
OK,我已经去除了SettingsController
,并采取其接口为RouteViewController
。我是从SettingsViewController
初始化如下:
RouteViewController *routeController = [[RouteViewController alloc] initWithHighway:isHighways];
然后通过简单地从RouteViewController访问它:
NSLog(@"Highway: %d",self.isHighway);
即使如此,它总是给我0
从未1
。
编辑
对于刚刚维持这4 UISwich在我SettingsViewController现在,我使用NSUserDefaults的。我认为这是一个更好的方法...感谢所有的帮助...
你应该使用单例对象的SettingsController,或通过初始化的某种方式。请注意,首先创建对象:SettingsController *settingsController = [[SettingsController alloc] initWithHighway:isHighways];
,然后重新初始化新对象:SettingsController *settingsController = [[SettingsController alloc] init];
,而不是重新使用它。所以它不包含先前启动的变量。
在我看来,你想让这个类存储4个变量,但是你有4个初始化程序,这是一种不寻常的方式。我不知道应用程序的其余部分,但是想创建此类只存储一个变量是很常见的吗?
无论如何,正如ThomasM所说,如果您将该值设置为YES,那么它应该返回为YES。
BOOL isHighways = YES;
SettingsController *settingsController = [[SettingsController alloc] initWithHighway:isHighways];
NSLog(@"Highways? %@", settingsController.isHighwayOn ? @"YES" : @"NO");
这应该打印YES。
请注意,您正在创建属性,但您也正在创建一个存取方法。这是多余的 - settingsController.isHighway和settingsController.isHighwayOn会返回相同的值。
(并且阅读关于使其成为单例的其他答案 - 除非您将这些属性保留在某处,否则该类的每个实例都将拥有自己的一组值。
它以这种方式打印YES。好的,我删除了SettingsController并将其接口传递给RouteViewController。我从SettingsViewController初始化如下: RouteViewController * routeController = [[RouteViewController alloc] initWithHighway:isHighways]; 然后从RouteViewController通过以下方式访问它: NSLog(@“Highway:%d”,self.isHighway); 即使它总是给我0从来没有1. –
正如ThomasM在评论中指出的,您没有初始化您的isHighway
变量。既然你没有重新实现init
方法SettingsController
类,当你调用
SettingsController *settingsController = [[SettingsController alloc] init];
调用默认初始值,不初始化您isHighway
变量(或更好,isHighway
被初始化为0)。
尝试重新实现你的init
方法为例:
-(id)init {
self = [super init];
if (self) {
isHighWay = 1;
}
return self;
}
让我解释一下,以便更好地理解: 我有一个SettingsViewController,它包含4个UISwitch。我正在使用它们在SettingsController类中存储[UISwitch isOn]值。然后我试图访问RouteViewController类中的BOOL值。当我访问RouteViewController中的SettingsController的BOOL值时,虽然值从SettingsViewController存储为1,但我总是得到0。 –
你说得对。顺便说一下,为了在SettingsViewController中维护这4个UISwich,我现在使用了NSUserDefaults。我认为这是一个更好的方式...谢谢你的帮助... –
你在哪里设置的布尔值将价值?它们都从0开始,所以如果你没有设置它们的值,当然,你会得到0而不是1. – ThomasM
我正在使用UISwitch切换布尔值 –
你的编辑不清楚。请更好地解释您对代码所做的更改,否则很难理解您放置代码的位置以及代码无法工作的原因。 – Saphrosit