0

这个错误很奇怪。我在应用程序委托中有一堆属性,我可以毫无问题地访问它们。我的代码在没有 ARC 的情况下运行良好,但是当我打开 ARC 时,我收到了这个非常奇怪的错误。在“AppDelegate *”类型的对象上找不到属性“navigationController”

除了这个,一堆其他的属性工作得很好。

我已经清理了所有东西并重新启动了 Xcode。

这是代码:

AppDelegate.h:

@interface AppDelegate : UIResponder <UINavigationControllerDelegate> {
    UINavigationController *navigationController;
    NSString *appName;
}
@property (strong, nonatomic) NSString *appName;
@property (strong, nonatomic) UINavigationController *navigationController;

AppDelegate.m

    #import "AppDelegate.h"
    @synthesize navigationController, appName;

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        appName = [NSString stringWithString:[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]];
        navigationController = [[UINavigationController alloc] initWithRootViewController:self.startViewController];
}

我的类.h

@class AppDelegate;
@interface MyClass: UIResponder {
    AppDelegate *appDelegate;

}

我的班级.m

#import "AppDelegate.h"
#import "MyClass.h"

@implementation MyClass 
- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here. 
        appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
        [self initFacebook];
    }
    return self;
}

- (void) doStuff {
    NSLog(@"App Name:%@",appDelegate.appName); //this works fine

    //This one doesn't
    UINavigationController *myNavigationController = appDelegate.navigationController;
}

更新:我做了一个解决方法。基本上,我在 MyClass 中创建了一个名为 navigationViewController 的属性,并在 MyClass 在 AppDelegate 中实例化之后传递对象,而不是直接从 MyCLass 中的 AppDelegate 获取(如上所示)。我还是很疑惑,一定是编译器的bug。我仍然对如何使原始代码工作非常感兴趣。

4

2 回答 2

4

在 MyClass.m 中,您导入的是“MyClass”而不是“MyClass.h”。这可能是问题吗?

有时清理项目还不够:您可能需要打开“管理器”窗口,在“项目”选项卡下选择您的项目,然后单击按钮删除派生数据。

于 2012-05-10T04:51:56.320 回答
0

好的,我只将有问题的代码放入一个空项目中,如问题所示。它编译得很好。这真的很令人费解,所以我断定它一定是 Xcode 中的错误,或者可能是某些设置。无论如何,我无法弄清楚出了什么问题,所以我只是在 AppDelagate 中实例化 MyClass 时传递有问题的对象(navigationController)。一个对象就可以了,谢天谢地,所有其他 appDelegate 属性/选择器都可以正常访问。

于 2012-05-10T07:04:37.490 回答