Objective c 从另一个类访问变量时出现问题

Objective c 从另一个类访问变量时出现问题,objective-c,ios,class,variables,Objective C,Ios,Class,Variables,我编写了以下代码来将变量存储在一个类中,以便以后从另一个类访问: 设置控制器 @interface SettingsController : NSObject @property (nonatomic) BOOL isHighway; @property (nonatomic) BOOL isToll; @property (nonatomic) BOOL isVoiceNavigation; @property (nonatomic) BOOL isVoiceCommand; -(id)i

我编写了以下代码来将变量存储在一个类中,以便以后从另一个类访问:

设置控制器

@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
设置控制器

@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];
SettingsController *settingsController = [[SettingsController alloc] init];

BOOL isHighway = [settingsController isHighwayOn];
RouteViewController *routeController = [[RouteViewController alloc] initWithHighway:isHighways];
并访问它们作为

BOOL isHighway = [settingsController isHighwayOn];
但如果我试图从另一个类访问这些变量,RouteViewController如下所示:

SettingsController *settingsController = [[SettingsController alloc] initWithHighway:isHighways];
SettingsController *settingsController = [[SettingsController alloc] init];

BOOL isHighway = [settingsController isHighwayOn];
RouteViewController *routeController = [[RouteViewController alloc] initWithHighway:isHighways];
它总是给我
0
,而我从来没有得到
1

有人能帮我访问这些变量吗

编辑 好的,我已经删除了
设置控制器
,并将其接口带到
路由设备控制器
。我正在从
设置viewcontroller
进行初始化,如下所示:

SettingsController *settingsController = [[SettingsController alloc] initWithHighway:isHighways];
SettingsController *settingsController = [[SettingsController alloc] init];

BOOL isHighway = [settingsController isHighwayOn];
RouteViewController *routeController = [[RouteViewController alloc] initWithHighway:isHighways];
然后通过以下方式从RouteViewController访问它:

NSLog(@"Highway: %d",self.isHighway);
即使这样,它也总是给我
0
从不
1

编辑
为了在我的setingsviewcontroller中维护这4个UISwich,我现在使用NSUserDefaults。我认为这是一个更好的方法。。。感谢您的帮助…

您应该使用singleton对象设置控制器,或者以某种方式传递初始化的对象。请注意,首先创建对象:
SettingsController*SettingsController=[[SettingsController alloc]initWithHighways:isHighways]而不是重用它,您可以在中初始化新的:
settingscocontroller*settingscocontroller=[[settingscocontroller alloc]init]。所以它不包含以前启动的变量。

在我看来,您希望这个类存储4个变量,但您有4个初始值设定项,这是一种不同寻常的方式。我不知道应用程序的其他部分,但是创建这个类只存储一个变量是常见的吗

无论如何,正如ThomasM所说,如果将值设置为YES,那么它应该返回为YES

BOOL isHighways = YES;
SettingsController *settingsController = [[SettingsController alloc] initWithHighway:isHighways];
NSLog(@"Highways?  %@", settingsController.isHighwayOn ? @"YES" : @"NO");
这应该打印“是”

请注意,您正在创建属性,但也在创建访问器方法。这是多余的-settingsController.isHighway和settingsController.isHighwayOn将返回相同的值


(阅读另一个关于将其设置为单例的答案-除非您将这些属性持久化到某个位置,否则该类的每个实例都将有自己的值集)。

正如ThomasM在评论中指出的,您没有初始化
isHighway
变量。由于在调用

SettingsController *settingsController = [[SettingsController alloc] init];
调用默认初始值设定项,它不会初始化
isHighway
变量(或者,更好的是,
isHighway
初始化为0)

尝试重新实现
init
方法,例如:

-(id)init {
    self = [super init];

    if (self) {
        isHighWay = 1;
    }

    return self;
 }

你在哪里设置布尔值?它们都是从0开始的,因此如果不设置它们的值,自然会得到0而不是1。我正在使用UISwitch切换布尔值您的编辑不清楚。请更好地解释您对代码所做的更改,否则很难理解您将代码放在何处以及代码不起作用的原因。为了更好地理解,让我解释一下:我有一个SettingsViewController,它包含4个UI开关。我使用它们在SettingsController类中存储[UISwitch isOn]值。然后我尝试在RouteViewController类中访问这些布尔值。当我在RouteViewController中访问SettingsController的布尔值时,我总是得到0,尽管该值在SettingsViewController中存储为1。你是对的。顺便说一下,为了在我的SettingsViewController中维护这4个UISwich,我现在使用NSUserDefaults。我认为这是一个更好的方法。。。谢谢你的帮助…它正以这种方式打印“是”。好的,我已经移除了SettingsController并将其接口带到RouteViewController。我正在通过设置ViewController进行初始化,如下所示:RouteViewController*RouteControl=[[RouteViewController alloc]initWithHighways:isHighways];然后通过以下方式从RouteViewController访问它:NSLog(@“高速公路:%d”,self.isHighway);即使这样,它也总是给我0而不是1。