2013-06-05 57 views
1

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

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

enter image description here

下面是我用在我的视图控制器代码:哪些日志

@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) 
+0

它是在一个UINavigationController ? – Kevin

+0

@Kevin不,它只是一个空的导航栏。 –

回答

2

navigationItem是(已经)A(只读)属性上UIViewController (由伊法尔的_navigationItem备份),可能是这个问题的原因。尝试重命名属性,它应该是罚款(实际上在我的版本的Xcode它抛出,如果我甚至尝试添加这是其出口的错误)

enter image description here

更新:与另一名已经测试它似乎是好的确实

enter image description here

更多更新:这是伊娃的名字

@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> 
+0

对不起,我的错。我应该提到我在视图控制器中使用名为'navigationItem'的裸IVAR,而不是属性。 –

+0

但是你的屏幕截图显示了2个插座的权利?这意味着你有两个属性('navigationBar'&'navigationItem')正确吗?仍然当我使用'navigationItem'出口与'@synthesize navigationItem = navigationItem;'它仍然**工程**罚款。 – Alladinian

+0

不,我只是把网点连接到了ivars。我用上面的视图控制器代码发布了一个编辑。 –