0

我对 iOS 编程很陌生,所以请善待 :) 我正在尝试用谷歌搜索这几个小时,但没有成功。我已经设置了一个 iOS 主细节项目。

我需要做什么。detailViewController就是在app调用的时候改变一个标签applicationDidEnterBackground

这是我在 appdelegateapplicationDidEnterBackground方法中的错误代码

UIViewController *temp = [self.navigationController visibleViewController];
NSLog(@"%@",[temp nibName]);
if ([temp nibName] == @"DetailViewController") {
    temp._lblBrewingTime = @"";
}

这不起作用。语义问题:lblbrewingtime在 UIViewController 类型的对象上找不到。如果我添加一个断点并检查临时指针的结构。我可以看到_lblBrewingTime类型。

您能否指出我如何获取应用程序委托中当前加载的任何视图的属性?

非常感谢,问候,尼克

4

2 回答 2

2

一旦您确定 visibleViewController 实际上是 DetailViewController,您必须将其显式转换为 DetailViewController 。所以这里是修复: -

UIViewController *temp = [self.navigationController visibleViewController];
NSLog(@"%@",[temp nibName]);
if ([temp nibName] == @"DetailViewController") {
DetailViewController* tempDVCObj = (DetailViewController*)temp;
//temp._lblBrewingTime = @"";
tempDVCObj._lblBrewingTime = @"";
}

它说您的属性_lblBrewingTime不是 UIViewController 的属性,它是 DetailViewController 的属性,即 UIViewController 的子类,这是绝对正确的。

于 2013-02-22T09:25:50.727 回答
0

这里有一些东西:

  1. 您应该在 AppDelegate 中保留对主控制器的引用并通过此引用访问视图 - 导航控制器中的可见视图控制器可能不是您的视图控制器类,例如因为您导航到另一个视图。

  2. 您可以通过 UIViewController 接口访问视图控制器。UIViewController 类不知道您的子视图控制器的属性,因此它无法访问 _lblBrewingType。您必须使用视图控制器的类名来访问其属性,例如 MyViewController * myVc = (MyViewController*)viewController。

  3. _lblBrewingType 看起来像视图控制器的内部变量。要从外部访问它,您必须将其作为属性提供:

// MyViewController.h

@interface MyViewController : UIViewController

{

UILabel* _lblBrewingType;

}

@property(强,非原子)IBOutlet UILabel *lblBrewingType;

和实施:

// MyViewController.m

@implementation MyViewController

@synthesize lblBrewingType;

@结尾

于 2013-02-22T09:25:28.110 回答