2012-03-16 4 views
5

Monotouch 5.2.6およびiOS SDK 5.0.1を使用しています。回転時のUIPageViewControllerからのNSInternalInconsistencyException

私は別のビューコントローラの子コンテナであるUIPageViewControllerを持っています。 は、それは次のように作成されます。私は、デバイス(シミュレータ)を回転させる場合

pageViewController = new UIPageViewController (UIPageViewControllerTransitionStyle.PageCurl, UIPageViewControllerNavigationOrientation.Horizontal, UIPageViewControllerSpineLocation.Min); 
    this.AddChildViewController (pageViewController); 
    pageViewController.DidMoveToParentViewController (this); 
    this.viewCurrentMode.AddSubview (pageViewController.View); 

、私はUIApplication.SendEvent()でこの例外を取得:

Objective-Cの例外がスローされました。名前:NSInternalInconsistencyException 理由:提供されるビューコントローラの数は、(1)必要な 番号と一致しない(2)要求された脊椎の場所 (UIPageViewControllerSpineLocationMid)

のための脊椎の場所が「半ば」のではなく、 "min"。何か案は?

答えて

4

True、UIPageViewControllerを "Min"で初期化しました。それは、まだ

pageViewController.GetSpineLocation = (p, o) => return <spinelocation>; 

public override UIPageViewControllerSpineLocation GetSpineLocation (UIPageViewController pageViewController, UIInterfaceOrientation orientation) 
{ 

    //return spine location according to interface orientation and whatever 
    //criteria you prefer 

} 

あるいは、そのGetSpineLocation財産(MonoTouchでの天国!)にメソッドを割り当てます。しかし、あなたはあなたのページのコントローラのデリゲートを実装し、GetSpineLocationメソッドをオーバーライドする必要があります少し予期しない動作をします。私は、デバイスがランドスケープに回転するとき(Appleドキュメントの情報を見つけることはできませんでしたが)、ネイティブのpageViewController:spineLocationForInterfaceOrientation:メソッドのデフォルト実装が "Mid"を返すと仮定します。とにかく、それを正しくするために上記の方法を無効にする必要があります。

+0

多分私は自分自身を経験豊富なMT開発者だと考えていますが、私はあなたの本を買うべきです! :-) – Krumelur

+0

Hehe、本はいつでも役に立つ...! ;) –

0

UIPageViewControllerSpineLocationの値を確認したところ、Appleのdocumentationの値と一致していました。ユーザー提供のコールバックが指定されていない場合

はまたディミトリスが正しい、(一方が設けられていない)デフォルト内部、デリゲートがUIPageViewControllerSpineLocation.Midを返す(すなわちUIPageViewController.GetSpineLocationが割り当てられていない場合)。

これは自動生成されたバインディングコードなので、デフォルトの何も指定されていない場合は定数を返さないようにしてください。しかし、バグ報告(そしてこの質問へのリンク)を自由に開いてみてください。

関連する問題