Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在所有类中都有NSString值?_Ios_Objective C_Appdelegate - Fatal编程技术网

Ios 如何在所有类中都有NSString值?

Ios 如何在所有类中都有NSString值?,ios,objective-c,appdelegate,Ios,Objective C,Appdelegate,我需要在viewController中捕获数据,并在应用程序执行期间保持存储状态,您可以在我拥有的任何其他视图中使用它,请尝试在AppDelegate中创建NSString,如下所示: AppDelegate.h property (Retain, nonatomic) NSString * token; AppDelegate.m synthesize token; 然后在另一个类中调用它,如下所示 添加包括 #include "AppDelegate" 创建对象 AppDelegate

我需要在viewController中捕获数据,并在应用程序执行期间保持存储状态,您可以在我拥有的任何其他视图中使用它,请尝试在AppDelegate中创建NSString,如下所示:

AppDelegate.h

property (Retain, nonatomic) NSString * token;
AppDelegate.m

synthesize token;
然后在另一个类中调用它,如下所示

添加包括

#include "AppDelegate"
创建对象

AppDelegate * theToken = [[AppDelegate allow] init];

label.text = theToken.token;

但不适用于我,在某些ViewController中出现nill

问题是您正在创建AppDelegate的全新实例,而不是访问当前实例

而不是:

AppDelegate * theToken = [[AppDelegate alloc] init];
试试这个:

AppDelegate * theToken = (AppDelegate*)[[UIApplication sharedApplication] delegate];
编辑:正如rmaddy和Louis Tur在评论中指出的,您使用的保留和合成是弧前遗迹

“Strong”相当于“retain”,因此您可以将您的属性更新为以下内容,以保持强引用:

property (strong, nonatomic) NSString * token;

此外,很久以前(直到弧后的某个时间,但如果我没记错的话,在iOS6之前),需要在.m中合成.h属性。但在现代,通常最好的做法是在.m中省略
synthesis
,而是使用“self”访问
AppDelegate.m
中的属性;例如,
self.token

您可能希望找到一本现代教程。假设您使用的是ARC(应该是),那么属性应该是
strong
(或者可能是
copy
),而不是
retain
。您不需要使用
@synthesis
行。除了下面的答案之外,用
strong
替换
retain
并删除
synthesis
调用也可能很好(假设您使用的是ARC,而不是为该属性创建自定义setter/getter)(编辑:@rmaddy说的:D)将更新我的答案以提及这些事情…@jlehr我没有说它不起作用。只是过去需要它(甚至是“ARC后和iOS6前”),但现在情况已经不是这样了,现在将其排除在外是“一般良好做法”。