使用全局变量准备Segue

时间:2015-10-17 02:29:12

标签: ios objective-c

我正在尝试将信息从1个视图控制器传递到另一个视图控制器。但是,当我执行此代码时,NSLog显示输出null。我不能使用准备segue因为我使用popViewControllerAnimated方法。有没有办法可以在不使用准备segue的情况下使用全局变量?

- (void)viewDidLoad {
    [super viewDidLoad];
    aVariables = [GlobalVariables variables];

}

- (IBAction)adSwitchPressed:(id)sender {
if (adSwitch.isOn) {
    adString = @"ON";
}
if (!adSwitch.isOn) {
    adString = @"OFF";
    }
}

- (IBAction)tieSwitchPressed:(id)sender {
    if (tieSwitch.isOn) {
        tieString = @"ON";
    }
    if (!tieSwitch.isOn) {
        tieString = @"ON";
    }
    aVariables.gTieString2 = tieString;
}

- (IBAction)saveButtonPressed:(id)sender {

    [self.navigationController popViewControllerAnimated:YES ];
    aVariables.gAdString = adString;
    aVariables.gTieString2 = tieString;
    NSLog(@"%@", aVariables.gAdString);
}

#pragma mark - Navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

}

1 个答案:

答案 0 :(得分:1)

正如El Tomato所说,它非常标准。我正在回答这个问题,指导你朝着正确的方向前进:

  

有没有办法可以在不使用的情况下使用全局变量   为segue做准备?

回答 - 是的。使用委托。像这样:

第1步:像这样定义模型GlobalVariables

#import <Foundation/Foundation.h>

@interface GlobalVariables : NSObject

@property (nonatomic, strong) NSString *gAdString;
@property (nonatomic, strong) NSString *gTieString2;

@end

第2步:像这样制定ViewController 2

ViewController 2.h

#import <UIKit/UIKit.h>
#import "GlobalVariables.h"

@protocol ViewController2Delegate <NSObject>

- (void)detailsSaved:(GlobalVariables *)iGlobalVariables;

@end

@interface ViewController2 : UIViewController

- (instancetype)initWithDelegate:(id <ViewController2Delegate>)iDelegate;

@end

ViewController 2.m

#import "ViewController2.h"

@interface ViewController2 ()

@property (nonatomic, strong) GlobalVariables *globalVariables;
@property (nonatomic, assign) id <ViewController2Delegate> delegate;

@end

@implementation ViewController2


- (instancetype)initWithDelegate:(id <ViewController2Delegate>)iDelegate {
    if (self = [super init]) {
        self.delegate = iDelegate;
        self.globalVariables = [[GlobalVariables alloc] init];
    }

    return self;
}


- (IBAction)adSwitchPressed:(id)sender {
    if (adSwitch.isOn) {
        self.globalVariables.gAdString = @"ON";
    }
    if (!adSwitch.isOn) {
        self.globalVariables.gAdString = @"OFF";
    }
}

- (IBAction)tieSwitchPressed:(id)sender {
    if (tieSwitch.isOn) {
        self.globalVariables.gTieString2 = @"ON";
    }

    if (!tieSwitch.isOn) {
        self.globalVariables.gTieString2 = @"ON";
    }
}

- (IBAction)saveButtonPressed:(id)sender {
    if (self.delegate && [self.delegate respondsToSelector:@selector(detailsSaved:)]) {
        [self.delegate detailsSaved:self.globalVariables];
    }

    [self.navigationController popViewControllerAnimated:YES];
}

@end

第3步:最后,这就是ViewController 1应该是这样的:

<强> ViewController1.h

#import <UIKit/UIKit.h>
#import "ViewController2.h"

@interface ViewController1 : UIViewController <ViewController2Delegate>

@end

<强> ViewController1.m

#import "ViewController1.h"

@implementation ViewController1

- (void)presentViewController2 {
    ViewController2 *vc2 = [[ViewController2 alloc] initWithDelegate:self];

    [self.navigationController pushViewController:vc2 animated:YES];
}


- (void)detailsSaved:(GlobalVariables *)iGlobalVariables {
    // Use global variables here
}

@end

PS:这是它应该是什么样子的骨架。您需要实现其他视图控制器方法。