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

为了解决这个问题,您需要更改第一行代码,如果 homeViewController 打算成为以下实例,则它看起来像这样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 回答