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