3

ストーリーボードから構築されたシーンを使用して、アプリのウォークスルーを構築しようとしています。

そこで、pages と呼ばれる viewController の配列を作成します。

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

何を与える?前もって感謝します

4

2 に答える 2

8

indexOfObject:poコマンド ( print --object-description) が期待するオブジェクトを返しません。を返しますNSUInteger。次の単純なprintコマンドを使用します。

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

を使用するpoと、インデックス 0 はオブジェクト ポインタとして解釈されます。0 ポインターはnilであるため、それが出力されます。それ以外の値だった場合、有効なオブジェクト ポインターではないことはほぼ確実であるため、デバッガーはそれをどう処理すればよいかわかりませんでした。

于 2013-10-27T06:38:49.283 に答える
1

以下のようにしてみてください:-

   (lldb) p (NSInteger) [self.pages 
   indexOfObject:viewController];
于 2013-10-27T07:23:57.317 に答える