Ios 更改另一个类中的变量

Ios 更改另一个类中的变量,ios,objective-c,class,variables,Ios,Objective C,Class,Variables,在这里,我已经了解了无数类似的情况(堆栈溢出)。我已经将这些评论应用于我的情况,并且已经接近尾声,但还没有找到一个似乎适合我的解决方案。由于这是一件非常琐碎的事情,我对它如何不适合我感到困惑 无论如何,我试图从appDelegate类内部设置一个Int变量,如果这个变量是正确的话,那么它实际上属于另一个类(mainViewController) 对于MainViewController类.h文件,我有 @interface MainWindowControllerViewController :

在这里,我已经了解了无数类似的情况(堆栈溢出)。我已经将这些评论应用于我的情况,并且已经接近尾声,但还没有找到一个似乎适合我的解决方案。由于这是一件非常琐碎的事情,我对它如何不适合我感到困惑

无论如何,我试图从appDelegate类内部设置一个Int变量,如果这个变量是正确的话,那么它实际上属于另一个类(mainViewController)

对于MainViewController类.h文件,我有

@interface MainWindowControllerViewController :... { 
   int relayState;
}
@property (readwrite, nonatomic) int relayState;
@implementation MainWindowControllerViewController
@synthesize relayState = _relayState;

-(void)quickConnect { // Call for all UI bypassing and quick kill

NSLog(@"Relay state in MainWindow = %d", relayState);

    if (_relayState == 1) {
        NSLog(@"TURNING ON KILL SWITCH");
        self.writeData = [[NSString stringWithFormat:@"%@", @"e"] dataUsingEncoding:NSASCIIStringEncoding];
        [sensor write:sensor.activePeripheral data:writeData];

    } else {
        NSLog(@"TURNING OFF KILL SWITCH");
        self.writeData = [[NSString stringWithFormat:@"%@", @"o"] dataUsingEncoding:NSASCIIStringEncoding];
        [sensor write:sensor.activePeripheral data:writeData];
    }
}
#import "MainWindowControllerViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
    MainWindowControllerViewController *relayState;
}
@property (nonatomic, assign) MainWindowControllerViewController *relayState;
#import "MainWindowControllerViewController.h"

@implementation AppDelegate
@synthesize relayState = _relayState;

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *) sourceApplication annotation:(id)annotation {

    NSLog(@" Calling application: %@", sourceApplication);
    NSLog(@" URL scheme: %@", [url scheme]);

    if ([sourceApplication isEqualToString:@"URL-Scheme-Test"]) {

        if ([[url scheme] isEqualToString:@"TurnOffRelay"]) {

            _relayState =[[MainWindowControllerViewController alloc] init];
            _relayState.relayState = 1;
            NSLog(@"Relay State BEFORE = %d", _relayState.relayState);

        }

        return YES;

        if ([[url scheme] isEqualToString:@"TurnOnRelay"]) {

            _relayState =[[MainWindowControllerViewController alloc] init];
            _relayState.relayState = 0;
            NSLog(@"Relay State BEFORE = %d", _relayState.relayState);

        }

        return YES;

    }

    else

        return NO;


}
对于MainViewController类.m文件

@interface MainWindowControllerViewController :... { 
   int relayState;
}
@property (readwrite, nonatomic) int relayState;
@implementation MainWindowControllerViewController
@synthesize relayState = _relayState;

-(void)quickConnect { // Call for all UI bypassing and quick kill

NSLog(@"Relay state in MainWindow = %d", relayState);

    if (_relayState == 1) {
        NSLog(@"TURNING ON KILL SWITCH");
        self.writeData = [[NSString stringWithFormat:@"%@", @"e"] dataUsingEncoding:NSASCIIStringEncoding];
        [sensor write:sensor.activePeripheral data:writeData];

    } else {
        NSLog(@"TURNING OFF KILL SWITCH");
        self.writeData = [[NSString stringWithFormat:@"%@", @"o"] dataUsingEncoding:NSASCIIStringEncoding];
        [sensor write:sensor.activePeripheral data:writeData];
    }
}
#import "MainWindowControllerViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
    MainWindowControllerViewController *relayState;
}
@property (nonatomic, assign) MainWindowControllerViewController *relayState;
#import "MainWindowControllerViewController.h"

@implementation AppDelegate
@synthesize relayState = _relayState;

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *) sourceApplication annotation:(id)annotation {

    NSLog(@" Calling application: %@", sourceApplication);
    NSLog(@" URL scheme: %@", [url scheme]);

    if ([sourceApplication isEqualToString:@"URL-Scheme-Test"]) {

        if ([[url scheme] isEqualToString:@"TurnOffRelay"]) {

            _relayState =[[MainWindowControllerViewController alloc] init];
            _relayState.relayState = 1;
            NSLog(@"Relay State BEFORE = %d", _relayState.relayState);

        }

        return YES;

        if ([[url scheme] isEqualToString:@"TurnOnRelay"]) {

            _relayState =[[MainWindowControllerViewController alloc] init];
            _relayState.relayState = 0;
            NSLog(@"Relay State BEFORE = %d", _relayState.relayState);

        }

        return YES;

    }

    else

        return NO;


}
对于appDelegate.h文件,我有

@interface MainWindowControllerViewController :... { 
   int relayState;
}
@property (readwrite, nonatomic) int relayState;
@implementation MainWindowControllerViewController
@synthesize relayState = _relayState;

-(void)quickConnect { // Call for all UI bypassing and quick kill

NSLog(@"Relay state in MainWindow = %d", relayState);

    if (_relayState == 1) {
        NSLog(@"TURNING ON KILL SWITCH");
        self.writeData = [[NSString stringWithFormat:@"%@", @"e"] dataUsingEncoding:NSASCIIStringEncoding];
        [sensor write:sensor.activePeripheral data:writeData];

    } else {
        NSLog(@"TURNING OFF KILL SWITCH");
        self.writeData = [[NSString stringWithFormat:@"%@", @"o"] dataUsingEncoding:NSASCIIStringEncoding];
        [sensor write:sensor.activePeripheral data:writeData];
    }
}
#import "MainWindowControllerViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
    MainWindowControllerViewController *relayState;
}
@property (nonatomic, assign) MainWindowControllerViewController *relayState;
#import "MainWindowControllerViewController.h"

@implementation AppDelegate
@synthesize relayState = _relayState;

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *) sourceApplication annotation:(id)annotation {

    NSLog(@" Calling application: %@", sourceApplication);
    NSLog(@" URL scheme: %@", [url scheme]);

    if ([sourceApplication isEqualToString:@"URL-Scheme-Test"]) {

        if ([[url scheme] isEqualToString:@"TurnOffRelay"]) {

            _relayState =[[MainWindowControllerViewController alloc] init];
            _relayState.relayState = 1;
            NSLog(@"Relay State BEFORE = %d", _relayState.relayState);

        }

        return YES;

        if ([[url scheme] isEqualToString:@"TurnOnRelay"]) {

            _relayState =[[MainWindowControllerViewController alloc] init];
            _relayState.relayState = 0;
            NSLog(@"Relay State BEFORE = %d", _relayState.relayState);

        }

        return YES;

    }

    else

        return NO;


}
差不多就是这样。当我做日志时,我发现我想要更改值的relayState显示我能够更改值。但是当我执行上面的If语句检查relayState是否等于1时,变量始终为0


我不是最精通Obj C的。如果您能给我一些帮助,我将不胜感激!谢谢如果需要的话,我很乐意回答任何关于代码的额外问题。

您在某种程度上混合了一些老式的obj-c和它当前的外观,我认为您隐藏了一个变量(一个声明隐藏了另一个声明)

取出:

{ 
   int relayState;
}
从MainWindowControllerServiceController界面

取出MainWindowControllerServiceController实现中的
@synthesis

不要使用
\u relayState
(只需使用
relayState

对AppDelegate中的MainWindowControllerServiceController变量执行相同的操作


如果这不能解决问题,我们需要看看你正在创建的VC发生了什么。

我认为问题在于这一行

 _relayState =[[MainWindowControllerViewController alloc] init];
您正在两个if块中初始化MainWindowControllerViewController,每次都将该值重置为默认值(在本例中为0)

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
MainWindowControllerViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"MainWindowControllerViewControllerIdentifier"];
vc.relayState = 1;
对于MainViewController类.h

@interface MainWindowControllerServiceController:。。。{ 
int relayState;//删除此行
}
@不动产(非原子)内重结晶//使用此


试试这个

你犯的错误会给你带来无尽的问题

您有一个名为relayState的属性和一个名为relayState的实例变量

属性“relayState”由名为_relayState的实例变量支持。您还有另一个名为relayState的实例变量。两个不同的变量。分配给self.relayState会更改一个,分配给relayState会更改另一个。不要这样做

只要去掉“int relayState”;不要使用@synthetic,你就会没事的。至少比你现在好多了。然后可以使用self.relayState或_relayState。至少你会知道你在做什么

另外,有一个int relayState和一个MainWindowViewController*relayState只是自找麻烦。你似乎故意想把自己弄糊涂


另外,您似乎在使用writeData属性/变量进行同样危险的游戏

(在一种情况下)该行正下方的行表示:
\u relayState.relayState=1