//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 我完全不明白为什么会出现这种错误。有人可以吗
答案 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