我有三个UIViewController嵌入Tab Bar Controller。 在第二个视图中有一个UITextView和一个UISwitch,它们的值存储在NSUserDefault中。 在第三个视图中有一个UItableView,它的NSArray存储在NSUserDefault中。 现在在第一个视图中我有一个按钮,当我按下这个按钮时,我需要获取UISwitch,UITextView和UITableView的数组的值。 问题是,当我打开我的应用程序时,第二个和第三个视图的“viewDidLoad”方法不会被执行,这样UISwitch,UITextView和UITableView的值就不会从它们的NSUserDefaults加载。 该按钮的方法是:
- (IBAction)send:(id)sender
{
if ([MFMessageComposeViewController canSendText]) {
MFMessageComposeViewController *sms = [[MFMessageComposeViewController alloc] init];
NSString *textToShow = [self.delegate textToShow];
if ([self.delegate showCoordinates] == TRUE) {
NSLog(@"YES, I want Coordinates");
}
sms.messageComposeDelegate = self;
sms.body = textToShow;
sms.recipients = [self.numberSource giveMeNumbers];
[self presentModalViewController:sms animated:YES];
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Houston, We have a problem" message:@"You can't send SMS with this device" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
}
}
问题在于
NSString *textToShow = [self.delegate textToShow];
NSString *textToShow = [self.delegate textToShow];
sms.recipients = [self.numberSource giveMeNumbers];
返回“nil”,因为尚未调用第二个和第三个“viedDidLoad”方法。 如果我点击标签栏控制器中的第二个和第三个视图,将调用“viewDidLoad”方法,它们从NSUserDefaults获取值,当我按下第一个视图上的按钮时,它可以工作!
我该如何解决?
PS:请原谅我的英语不好! :(答案 0 :(得分:1)
首先尝试使用init..
方法加载ViewControllers。它会调用他们的viewDidLoad
。