使用UIApplication sharedApplication时出错?

时间:2011-08-16 05:44:08

标签: iphone objective-c ios xcode

显然,我是iOS开发的新手,但我真的可以使用别人的帮助。我正在构建一个标签栏应用程序,我试图将.plists加载到向下钻取的表视图中。问题是我似乎无法正确使用此方法,因为我正在尝试将导航控制器用于其ViewController中的选项卡。我很肯定我的错误在第二行。

A37dgAppDelegate *AppDelegate = (A37dgAppDelegate *)[[UIApplication sharedApplication] delegate];
AppDelegate.indNavControl *indNavControl;

随后,我收到了一些错误。这是代码,我将指出错误的位置:

    if([Children count] == 0) {

    DetailViewController *dvController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:[NSBundle mainBundle]];

    [self.indNavControl pushViewController:dvController animated:YES];//Property "indNavControl" not found on object of type "IndustriesViewController"
    [dvController release];
}
else {

    //Prepare to tableview.
    IndustriesViewController *indViewControl = [[IndustriesViewController alloc] initWithNibName:@"IndustryView" bundle:[NSBundle mainBundle]];

    //Increment the Current View
    indViewControl.CurrentLevel += 1;

    //Set the title;
    indViewControl.CurrentTitle = [dictionary objectForKey:@"Title"];

    //Push the new table view on the stack
    [self.indNavControl pushViewController:indViewControl animated:YES]; //Property "indNavControl" not found on object of type "IndustriesViewController"

    indViewControl.tableDataSource = Children;

    [indViewControl release];
}

}

为了清楚起见,我已经导入了我的App Delegate的头文件。任何帮助将不胜感激:)

3 个答案:

答案 0 :(得分:1)

AppDelegate.indNavControl *indNavControl; 行是错误的。我想你根本不需要这条线。在推送新视图控制器时,您可以直接使用 AppDelegate.indNavControl 而不是 self.indNavControl

[AppDelegate.indNavControl pushViewController:...

答案 1 :(得分:0)

你的理论认为问题在第二行是正确的。

AppDelegate.indNavControl *indNavControl;

该行并没有真正做任何事情。您需要一个AppDelegate.indNavControl所在的班级。

您有几个选择:

1)如果你想让indViewControl成为'公共'属性

* in your IndustriesViewController.h, move the declaration of indViewControl there.

@interface
{
    WhateverClass *indNavControl;
}

@property (retain) WhateverClass*indNavControl;
@end

2)如果你想要一个私有财产,那么在你的.m顶部添加一个空类别,上面有ivar和property声明。

编译器抱怨的是尝试访问不存在的属性。

调用self.whateverIvar需要@property定义。

答案 2 :(得分:0)

首先创建appdelegate的实例,然后你可以访问,无论你在appdelegate中声明的变量是什么属性,都是合成的。没有必要创建indNavControl的单独变量。