Ios 如何在所有类中都有NSString值?
我需要在viewController中捕获数据,并在应用程序执行期间保持存储状态,您可以在我拥有的任何其他视图中使用它,请尝试在AppDelegate中创建NSString,如下所示: AppDelegate.hIos 如何在所有类中都有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
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前”),但现在情况已经不是这样了,现在将其排除在外是“一般良好做法”。