0
    //Skip straight to main home view
    MySpyHomeViewController *homeViewController = [[MySpyHomeViewController alloc] initWithNibName:nil bundle:nil];
    self.navController = [[UINavigationController alloc] initWithRootViewController:homeViewController];

ユーザーが既にアプリケーションにログインしている場合、上記のコードを使用してビューに直接スキップします。

最後の行でエラーが発生します。「homeViewController」のローカル宣言は、インスタンス変数の警告を隠します。

次のような他のスレッドをいくつか読みました:ローカル宣言がインスタンス変数の警告を隠す このエラーが発生する理由が完全にはわかりません。誰かができますか

4

2 に答える 2

1

homeViewControllerヘッダー ( ) ファイルで変数を宣言した場合.h、上記のコードを実装 ( ) ファイルに入れる.mと、インスタンス (グローバル) 変数が のインスタンスに設定されずMySpyHomeViewController、代わりにローカル変数がインスタンス化されて に設定されます。のインスタンスMySpyHomeViewController

これを回避するには、コードの最初の行を次のように変更する必要がありますMySpyHomeViewController

//Skip straight to main home view
homeViewController = [[MySpyHomeViewController alloc] initWithNibName:nil bundle:nil];
self.navController = [[UINavigationController alloc] initWithRootViewController:homeViewController];

それ以外の場合は、この変数の名前を別の名前に変更して、グローバル変数の名前と競合しないようにする必要があります

于 2012-09-09T20:54:35.133 に答える
1

これは、同じスコープ内にインスタンス変数があり、その名前が であることを意味しますhomeViewController

したがって、一時的な名前を変更してあいまいさを避けたいと考えています。

MySpyHomeViewController * homeView = [[MySpyHomeViewController alloc] 
                          ^^^^^^^^              initWithNibName:nil bundle:nil];
self.navController =
  [[UINavigationController alloc] initWithRootViewController:homeView];
                                                             ^^^^^^^^

より詳細には、サンプルはインスタンス メソッドに表示され、そのメソッドを実装するクラスには名前付きhomeViewControllerのインスタンス変数があります。インスタンス変数は、次のように objc の多くの場所で宣言できます。


@interface MONClass : NSObject
{
@private
  HomeViewController * homeViewController;
}

@interface MONClass ()
{
  HomeViewController * homeViewController;
}

@implementation MONClass
{
  HomeViewController * homeViewController;
}

@interface MONClass : NSObject
@property (nonatomic, retain, readwrite) HomeViewController * homeViewController;
@end


@implementation MONClass
@synthesize homeViewController = homeViewController;
@end
于 2012-09-09T20:54:42.833 に答える