2013-10-27 207 views
3

我試圖使用從故事板構建的場景來構建應用程序的漫遊。indexofobject返回零

所以我填充viewControllers我的陣列稱爲頁:

@interface PVCPagesViewController() { 
    NSMutableArray *pages; 
} 

@property (retain, nonatomic) NSMutableArray *pages; 
@property (strong, nonatomic) UIPageViewController *pageController; 


@end 
在viewDidLoad中()

self.pages = [[NSMutableArray alloc] init]; 

UIViewController *page1 = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"page1"]; 

UIViewController *page2 = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"page2"]; 

UIViewController *page3 = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"page3"]; 

UIViewController *page4 = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"page4"]; 

self.pages = [[NSMutableArray alloc] initWithObjects:page1, page2, page3, page4, nil]; 

但是,當我將要在viewControllerAfterViewController()從數組加載另一個視圖控制器:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { 

    NSInteger index = [self.pages indexOfObject:viewController]; 

    index++; 

    return [self.pages objectAtIndex:index]; 
} 

我得到一個有效的viewController,我看到它在數組,但是當我嘗試objectAtIndex時,它返回nil?

(lldb) po self.pages 
<__NSArrayM 0x170243cc0>(
<UIViewController: 0x13cd05370>, 
<UIViewController: 0x13cd06030>, 
<UIViewController: 0x13ce00000>, 
<UIViewController: 0x13ce11b60> 
) 

(lldb) po viewController 
<UIViewController: 0x13cd05370> 
(lldb) po [self.pages indexOfObject:viewController]; 
<nil> 
(lldb) 

什麼給?在此先感謝

回答

8

indexOfObject:不會返回一個對象,這是po命令(print --object-description)預期的;它會返回NSUInteger。使用純print命令:

(lldb) p (NSUInteger)[self.pages indexOfObject:viewController]; 
0 

當使用po,索引0被解釋爲一個對象的指針。 0指針是nil,所以這就是打印的內容。如果它有任何其他值,調試器將不知道該如何處理它,因爲它幾乎肯定不會是有效的對象指針。

1

剛剛嘗試這樣如下: -

​​