1

我已经UINavigationBar在视图控制器 NIB 中设置了一个,并为栏及其关联的UINavigationItem. 在视图控制器中,viewDidAppear:我调试对象。导航栏设置为一个对象,但导航项是nil. 导航栏的items数组包含一个UINavigationItem,它指向一个有效的对象。

为什么没有设置NIB中的导航项?

在此处输入图像描述

这是我在视图控制器中使用的代码:

@interface NKViewController ()
{
    IBOutlet UINavigationBar *navigationBar;
    IBOutlet UINavigationItem *navigationItem;
}
@end

@implementation NKViewController

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    UINavigationItem *itemsNavigationItem = [[navigationBar items] objectAtIndex:0];
    NSLog(@"Items Navigation Item: %@", itemsNavigationItem);
    NSLog(@"ivar Navigation Item: %@", navigationItem);
}
@end

哪些日志:

Items Navigation Item: <UINavigationItem: 0x71a0fb0>
ivar Navigation Item: (null)
4

1 回答 1

2

navigationItemUIViewController是(已经)是(由 ivar 备份)上的(只读)属性_navigationItem,可能是导致此问题的原因。尝试重命名该属性,它应该没问题(实际上在我的 Xcode 版本中,如果我什至尝试将其添加为插座,它会引发错误)

在此处输入图像描述

更新:已经用另一个名字测试过,看起来确实没问题

在此处输入图像描述

更多更新:这是 ivar 的名称

@interface ViewController ()
{
    IBOutlet UINavigationBar *navigationBar;
    IBOutlet UINavigationItem *navigationItemX;
}
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    UINavigationItem *itemsNavigationItem = [[navigationBar items] objectAtIndex:0];
    NSLog(@"Items Navigation Item: %@", itemsNavigationItem);
    NSLog(@"ivar Navigation Item: %@", navigationItemX);

}

哪些日志:

Items Navigation Item: <UINavigationItem: 0x71b11c0>
ivar Navigation Item: <UINavigationItem: 0x71b11c0>

最后我们可以看到,navigationItem这样做确实是另外一回事:

NSLog(@"Items Navigation Item: %@", itemsNavigationItem);
NSLog(@"ivar Navigation Item: %@", navigationItemX);
NSLog(@"'Hidden' ivar: %@", [self valueForKey:@"navigationItem"]); // or self.navigationItem

哪些日志:

Items Navigation Item: <UINavigationItem: 0x7185190>
ivar Navigation Item: <UINavigationItem: 0x7185190>
'Hidden' ivar: <UINavigationItem: 0x759e040>
于 2013-06-05T20:33:37.210 回答