如何设置和传递在另一个View Objective C中也可访问的变量值

Smi*_*iya 0 objective-c ios

在AppDelegate.h中

@property(strong,nonatomic)NSString *str2;
Run Code Online (Sandbox Code Playgroud)

在ViewController.m中

AppDelegate *c3=[[AppDelegate alloc]init];
c3.str2= @"Hello";

NSLog(@"Output:-%@",c3.str2);
Run Code Online (Sandbox Code Playgroud)

输出:你好

Tableview中的导航代码didselect方法(视图控制器): -

Class2  *c2=[self.storyboard instantiateViewControllerWithIdentifier:@"cl2"];
[self.navigationController pushViewController:c2 animated:YES];
Run Code Online (Sandbox Code Playgroud)

在Class2.m中: -

AppDelegate *c3=[[AppDelegate alloc]init];
NSLog(@"%@",c3.str2);
Run Code Online (Sandbox Code Playgroud)

输出:-null

das*_*ght 5

首先,让我们修复您当前的方法:一些人建议使用app delegate来存储共享值的原因是有一个易于访问的实例.您永远不会创建新的应用委托,而是访问共享代理:

AppDelegate *c3 = (AppDelegate*)[[UIApplication sharedApplication] delegate];
Run Code Online (Sandbox Code Playgroud)

一旦替换[[AppDelegate alloc]init]上面的代码,您的代码将按照您期望的方式开始工作.

但是,这种解决方案并不理想.App委托不应该是存储共享值的地方; 它们应存储在模型对象中(在MVC中为"M",模型 - 视图 - 控制器).创建单例模型对象,在其中放置共享变量,并通过从不同视图控制器访问单例来使用该共享变量.