2013-06-05 106 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。我用上面的視圖控制器代碼發佈了一個編輯。 –