在App Delegate的didFinishLaunchingWithOptions
方法中,字符串myString
初始化为从NSUserDefaults
检索到的字符串(使用NSLog
确认)。我在这个基于选项卡的项目中有多个视图控制器,除了一个之外,它们都可以正常访问应用程序委托变量。这个视图控制器和其他视图控制器之间的唯一区别是它是UIViewController
而不是UITableViewController
(尽管后者继承了)。
在UIViewController
的初始化中,我提出了:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if (self.appDelegate.myString == nil)
NSLog(@"nil");
}
return self;
}
奇怪的部分:在initWithNibName
方法中,myString
(以及应用委托中的所有其他变量)都是nil
。但是,当我在viewDidAppear
方法中触发它时,它不是nil
(我得到正确的字符串)。此外,它还会在nil
方法中返回viewDidLoad
。所以我尝试在self.appDelegate
中初始化viewDidLoad
,然后检查字符串,但仍然会返回nil
。
我在某个地方出了问题,但无法理解。
答案 0 :(得分:0)
只是一个疏忽。我在从NSUserDefaults
检索变量之前初始化了视图控制器。