2012-03-15 5 views
7

私はSplitのMasterViewControllerにActionSheetを表示するUISplitViewControllerに基づいてアプリケーションを持っています。 iOS 5.1以前では、スプリットによって提示されたポップオーバーでアクションシートを提示するのに問題はありませんでしたが、今は、新しい「スライドイン」方法でMasterControllerを表示するのに間違っているようです。iOS 5.1 + UISctionViewController in PortraitMode + UIActionSheet in MasterController =アサーションエラー

問題は、[actionSheet show ..]メソッドを使用してActionSheetを表示しようとすると、アプリケーションが次のエラーでクラッシュすることです(正確なアサーションは以下のとおりです)。 ...

アイデアを

*** Assertion failure in -[UIActionSheet presentSheetInPopoverView:], /SourceCache/UIKit_Sim/UIKit-1914.84/UIActionSheet.m:1816 
sharedlibrary apply-load-rules all 
Error in re-setting breakpoint 1: 
Catchpoint 2 (throw)Error in re-setting breakpoint 1: 
Error in re-setting breakpoint 1: 
Current language: auto; currently objective-c 

私はしばらくの間、これをグーグルが、実質的な答えは...何人かの人々は、それが 新しいSplitViewControllerにかかわる問題であることができると言うん?

ありがとうございます!

更新:可能な一般的な回避策を掲載しました。チェックアウトしました。それがあなたのために働くなら、コメントを残して....もしOKならば、数日後に正しいとマークします。

+0

実際のアサーションは何ですか?コンソールからメッセージをください。 –

+0

私は正確な主張で質問を編集しました..ありがとう – Omer

+0

その後、コンソールに次の10行程度が必要です。 –

答えて

2

私も同じ問題があります。

if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) { 
    [self.actionSheet showFromBarButtonItem:sender animated:YES]; 
} else { 
    [self.actionSheet showInView:self.view.window]; 
} 

だから、ポートレートモードでは、アクションシートは、ウィンドウの中央に表示されます。クラッシュを防ぎ

つの回避策は、少なくともこのようなあなたのUIActionSheetを示すことです。理想的ではありませんが、少なくともクラッシュすることはありません。そして、風景モードでは、それは正常な動作をします。

+0

私の答えをチェックし、あなたの意見をコメントしてください – Omer

0

特定のオプションを指すことのポップオーバーの影響を維持するもう1つのオプションは、実際には次のことを行うことができます: 1.独自のUIPopoverを作成する 2.独自のUIViewControllerをUIPopoverの中に作成します。 3.新しく作成されたUIViewController内にUIActionSheetを表示します。 4. UIActionSheetのサイズからSetPopoverContentSizeを設定します。 5.最後に、UIActionsheetのClickedメソッドをワイヤリングして、ポップオーバーを終了します。

もう少しコードを書いていますが、これまでと同じ機能を提供しています。また、UIActionsシートのスライドイン効果もあります。

+0

私の答えをチェックし、あなたの意見をコメントしてください – Omer

0

私は次のようにタップフォームの回答に基づいて、一般的な解決策だと思う:

CGRect windowsRect = [actionSheetContainerView convertRect:viewToPresentActionSheet.frame toView:actionSheetContainer.window]; 
[actionSheet showFromRect:windowsRect inView:actionSheetContainer.window animated:YES]; 

これは、それはそう、ウィンドウ内actionSheetを再送、しかしOMZは、コメントと同じように右方向に

1

を指しますこの問題はAppleによってiOS 5.1.1で解決されています。 だから私は自分のアプリのチェンジログの既知の問題のセクションに追加することにしました。これを回避するには、ユーザーにiOS 5.1.1へのアップグレードを提案することです。

4

WWDCで私を助けてくれたアップルのエンジニアに大きな敬意を払って、このバグを回避するだけでなく、右ボタンでポップオーバーを指し示すソリューションもここにあります。

if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) 
    { 
     [actionSheet showFromBarButtonItem:self.actionSheetBarButtonItem animated:YES]; 
    } 
    else 
    { 
     CGRect windowsRect = [self.navigationController.toolbar convertRect:self.actionSheetBarButtonItem.customView.frame toView:self.view.window]; 

     [actionSheet showFromRect:windowsRect inView:self.view.window animated:YES]; 
    } 
+0

カスタムボタンではない場合、customViewがないので、navigationController.viewサイズからrectの位置を計算する必要があります。 – Conor