App委托变量尽管初始化但返回nil

时间:2012-11-19 00:48:44

标签: ios

在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

我在某个地方出了问题,但无法理解。

1 个答案:

答案 0 :(得分:0)

只是一个疏忽。我在从NSUserDefaults检索变量之前初始化了视图控制器。