28

Xcode をバージョン 4 から 5 に、したがって iOS 6 から iOS 7 にアップグレードした後、次のエラーが発生します。

'NSInvalidArgumentException'、理由: 'ビューがウィンドウにないため、シートを表示できません

この行で:

[actionSheet showInView:self.view];
4

9 に答える 9

48

私は文字通りこれとまったく同じ問題を抱えていましたが、残念ながら、問題の根本的な原因が何であるかはまだわかりません. ただし、以下に私の現在の解決策があります。問題の原因となっているルートで何か進展があれば、お知らせします。

UIWindow* window = [[[UIApplication sharedApplication] delegate] window];
if ([window.subviews containsObject:self.view]) {
    [emailSheet showInView:self.view];
} else {
    [emailSheet showInView:window];
}
于 2013-09-22T02:45:25.503 に答える
11

私は同じ問題を抱えています。私のコードでは、その理由は明らかに、アクション シートを に表示したかったからviewWillAppear:です。コードを に移動した後viewDidAppear:、エラーはなくなりました。

于 2013-10-09T05:09:17.167 に答える
7

問題の根本的な原因が何であるかはわかりませんが、私にとってはうまくいく解決策を見つけました。の代わりにself.view、次の行を挿入します。

[[[[UIApplication sharedApplication] keyWindow] subviews] lastObject]

例えば:

[actionSheet showInView:[[[[UIApplication sharedApplication] keyWindow] subviews] lastObject]];
于 2013-09-26T12:52:53.613 に答える
2

私は同じ問題を抱えていて、[actionSheet showInView:self.view];それを解決しました[actionSheet showInView:[UIApplication sharedApplication].keyWindow];

おそらく問題は、Apple のドキュメントの次の段落に関連しています。

サブクラス化に関する注意:

UIActionSheet はサブクラス化するようには設計されていないため、その階層にビューを追加するべきではありません。UIActionSheet API で提供されるよりも多くのカスタマイズでシートを表示する必要がある場合は、独自のシートを作成して でモーダルに表示できますpresentViewController:animated:completion:

于 2014-02-06T21:59:41.720 に答える
2

私は同じ問題を抱えていました。私の場合、self.viewが別のviewControllerを提示しているときに、self.viewにActionSheetを表示しようとしたときにこれが発生しました。

これはクラッシュです:「ビューがウィンドウにないため、シートを表示できません」

問題の例:

[modalViewController dismissModalViewControllerAnimated:YES];
[actionSheet showInView:self.view];

modalViewController が閉じてから ActionSheet を表示するのを待って、問題を解決しました。

解決:

[modalViewController dismissModalViewControllerAnimated:YES];
[actionSheet performSelector:@selector(showInView:) withObject:self.view afterDelay:0.6];

これが多くの人に役立つことを願っています:)

于 2014-01-01T13:19:47.917 に答える
1

私は以前に使用したことがあります

- (void)showFromTabBar:(UITabBar *)view;

私のコントローラーの1つで同様の問題が発生しました(さまざまなコントローラーからのアクションシートの表示を処理するユーティリティメソッドがあります)。

hidesBottomBarWhenPushed = YES;

iOS 7 では、これは tabBar で window を nil に設定しているように見え、前述のエラーが発生します。私の回避策は、タブバーのウィンドウプロパティを確認することです.nil呼び出しの場合

if (nil == tabBar.window) {
    [actionSheet showInView:self.window];
}
else {
    [actionSheet showFromTabBar:tabBar];
}
于 2014-03-08T19:30:05.280 に答える