'homeViewController'的本地声明隐藏了实例变量警告IOS错误

时间:2012-09-09 20:51:03

标签: ios uiviewcontroller uinavigationcontroller

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

如果用户已登录应用程序,我使用上面的代码直接跳到视图。

我在最后一行收到错误。 'homeViewController'的本地声明隐藏了实例变量警告。

我已阅读其他一些帖子,例如:local declaration hides instance variable warning 我完全不明白为什么会出现这种错误。有人可以吗

2 个答案:

答案 0 :(得分: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];

否则,您需要将此变量重命名为其他内容,以便它不会与全局变量的名称冲突

答案 1 :(得分: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