我正在尝试将信息从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 {
}
答案 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:这是它应该是什么样子的骨架。您需要实现其他视图控制器方法。