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];
}

MyClass.h

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

}

MyClass.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 から直接取得するのではなく、AppDelegate で MyClass をインスタンス化した後にオブジェクトを渡します (上記のように)。私はまだ困惑しています。コンパイラのバグに違いありません。元のコードを機能させる方法については、今でも非常に興味があります。

4

2 に答える 2

4

MyClass.m では、「MyClass.h」ではなく「MyClass」をインポートしています。これが問題でしょうか?

プロジェクトをクリーンアップするだけでは不十分な場合があります。オーガナイザー ウィンドウを開き、[プロジェクト] タブでプロジェクトを選択し、ボタンをクリックして派生データを削除する必要がある場合があります。

于 2012-05-10T04:51:56.320 に答える
0

OK、質問に見られるように、問題のあるコードのみを空のプロジェクトに入れました。それはうまくコンパイルされます。本当に不可解なので、Xcode のバグか、何らかの設定に違いないと結論付けました。とにかく、何が問題なのかわからなかったので、AppDelagate で MyClass をインスタンス化するときに、問題のあるオブジェクト (navigationController) を渡すだけです。1 つのオブジェクトで問題なく、ありがたいことに、他のすべての appDelegate プロパティ/セレクターに問題なくアクセスできます。

于 2012-05-10T07:04:37.490 に答える