使用多个视图从 appdelegate 访问值时遇到问题

Posted

技术标签:

【中文标题】使用多个视图从 appdelegate 访问值时遇到问题【英文标题】:Trouble accessing values from appdelegate with multiple views 【发布时间】:2011-12-15 02:05:01 【问题描述】:

我正在尝试从作为应用程序视图控制器的子视图创建的视图中访问我在 AppDelegate 中作为属性创建的 int 和 float(我知道这是一个禁忌,我应该使用 MVC 范例,但这是为了课,我们这学期没有讲过)。我可以设置每个视图的值,然后在同一个视图中获取它们,但是当我想将所有值聚合到一个视图中时,我无法访问任何内容。在我拥有的每个视图的viewWillDisappear 方法中:

Final2AppDelegate* delegate = (Final2AppDelegate *)[[UIApplication sharedApplication]delegate];

后跟我要设置的值: ... delegate.oldTotal = olds; ...

然后在聚合所有值的视图上,我有标签,其文本应该设置为存储在delegate 中的值,但我得到的都是 0。我不确定视图是否调用了willAppearwillDisappear 方法,因为它们被控制为:

-(IBAction)loadBeverageView:(id)sender
    [self clearView];
    [self.view insertSubview:beverageViewController.view atIndex:0];

-(void)clearView
    if(beverageViewController.view.superview)
        [beverageViewController.view removeFromSuperview];
    else if(appetizerViewController.view.superview)
        [appetizerViewController.view removeFromSuperview];
    else if(entreeViewController.view.superview)
        [entreeViewController.view removeFromSuperview];
    else if(sideViewController.view.superview)
        [sideViewController.view removeFromSuperview];
    else if(dessertViewController.view.superview)
        [dessertViewController.view removeFromSuperview];
    else
        [billViewController.view removeFromSuperview];
    

我花了几天的时间试图让它发挥作用,但没有什么可显示的。有人可以在这里阐明一下吗?


AppDelegate 代码和我用来访问它的代码


我有我一直在尝试使用的整数和浮点数:

int eggTotal;@property(nonatomic,assign)int eggTotal;

那么它们在实现文件中都是synthesized。我一直在分配这样的值:

Final2AppDelegate* delegate = (Final2AppDelegate *)[[UIApplication sharedApplication]delegate];
delegate.oldTotal = olds;

我一直在尝试像这样访问它们:

eggFinalQty.text = [NSString stringWithFormat:@"%d",delegate.eggTotal];

【问题讨论】:

你如何存储intsfloats——你使用@property@sythesize吗? 是的,我将它们存储为 AppDelegate 的属性 【参考方案1】:

我认为-(void) clearView 不需要那么复杂。如果您只是想删除之前设置的视图,请尝试以下操作:

-(void) clearView 
    if ([[self.view subviews] count] > 0) 
        [[[self.view subviews] objectAtIndex:0] removeFromSuperview];
    

请注意,我刚刚输入了这个,所以请注意拼写错误。

如果self.view 仅包含您正在添加的视图,这也会变得更加简单。您可以这样做,而不是使用索引 0:

-(IBAction)loadBeverageView:(id)sender
    [self clearView];
    [self.view addSubview:beverageViewController.view];

和....

-(void) clearView 
    if ([[self.view subviews] count] > 0) 
        [[[self.view subviews] lastObject] removeFromSuperview];
    

【讨论】:

我知道这比它必须要复杂的多,但这不是问题,我无法访问存储在 AppDelegate 中的数据 抱歉,我认为您需要发布代码以显示您的 App 委托的设置方式以及访问它的代码。

以上是关于使用多个视图从 appdelegate 访问值时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

从AppDelegate中访问NavigationController指向的初始视图

从 AppDelegate 访问在故事板的 tableview 中创建的视图?

从 AppDelegate 访问 View Controller 的属性

如何从 appDelegate 访问每个 ViewController?

从 AppDelegate 呈现特定的视图控制器

UISplitview:从 appDelegate 访问 UITabBarController