当地申报';homeViewController';隐藏实例变量警告IOS错误

当地申报';homeViewController';隐藏实例变量警告IOS错误,ios,uiviewcontroller,uinavigationcontroller,Ios,Uiviewcontroller,Uinavigationcontroller,如果用户已经登录到应用程序,我使用上面的代码直接跳到视图 我在最后一行收到一个错误。“homeViewController”的本地声明隐藏实例变量警告 我读过其他一些帖子,比如: 我不完全理解为什么会发生这种错误。如果您在头文件(.h)中声明了变量homeViewController,那么将上述代码放入您的实现(.m)文件意味着实例(全局)变量将不会设置为MySpyHomeViewController的实例,是否有人可以删除,相反,局部变量被实例化并设置为MySpyHomeViewControl

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

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

我读过其他一些帖子,比如:
我不完全理解为什么会发生这种错误。如果您在头文件(
.h
)中声明了变量
homeViewController
,那么将上述代码放入您的实现(
.m
)文件意味着实例(全局)变量将不会设置为
MySpyHomeViewController
的实例,是否有人可以删除,相反,局部变量被实例化并设置为
MySpyHomeViewController
的实例

要解决这个问题,您需要更改第一行代码,以便在homeViewController打算成为
MySpyHomeViewController
的实例时,它看起来像这样:

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

否则,您需要将此变量重命名为其他变量,以便它不会与全局变量的名称冲突。这意味着您在同一范围内有一个实例变量,其名称为
homeViewController

因此,您希望通过重命名临时名称来避免歧义:

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

更详细地说,您的示例出现在一个实例方法中,实现该方法的类有一个名为
homeViewController
的实例变量——实例变量可以在objc的许多地方声明,例如:






与其重命名临时变量,不如将ivar重命名为
\u homeViewController
(或者使用新的编译器,只需删除合成,它就可以为您做到这一点)。@RobNapier只是约定的不同,存在多个约定。谢谢,我将接口中的变量声明为属性(非原子,强)MySpyHomeViewController*homeViewController;我是否无法使用此变量/为什么它会创建本地变量。上述情况是否应该改变@贾斯汀-我如何确保我有了新的编译器,我应该在哪里检查它?@StuartM你可以使用它。该名称由现有声明(ivar)使用——将其视为等同于
void f(){int a;int a;}
——因此只需为局部变量选择另一个名称(而不是属性),正如我在回答中所述(
homeView
)。应用商店的Xcode已经足够新了。
MySpyHomeViewController * homeView = [[MySpyHomeViewController alloc] 
                          ^^^^^^^^              initWithNibName:nil bundle:nil];
self.navController =
  [[UINavigationController alloc] initWithRootViewController:homeView];
                                                             ^^^^^^^^
@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