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