2

コンソールを見ると、このメッセージが表示されます

2010-09-18 17:04:05.284 Wasted Time[8998:207] *** Assertion failure in -[UIActionSheet showInView:], /SourceCache/UIKit_Sim/UIKit-1145.66/UIAlert.m:7073
2010-09-18 17:04:05.286 Wasted Time[8998:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: view != nil'
2010-09-18 17:04:05.286 Wasted Time[8998:207] Stack: (
    42272848,
    43430700,
    42010379,
    811796,
    3796273,
    3862560,
    9631,
    3616645,
    3688229,
    3682846,
    3690662,
    3686119,
    4983946,
    71264534,
    71263781,
    71207378,
    71206706,
    3003734,
    3030334,
    3011831,
    3043800,
    51265916,
    41552028,
    41547944,
    3002913,
    3036018,
    8314
)
terminate called after throwing an instance of 'NSException'

The code is as follows:

- (void)viewDidLoad {
    BOOL    continueYesNo;
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    continueYesNo = [prefs boolForKey:@"keyContinueMeeting"];   
    if (continueYesNo) {
        NSString *message_continue = [[NSString alloc] initWithFormat:@"Do you want to Continue the Prior Meeting"];
        UIActionSheet *actionSheet = [[UIActionSheet alloc] 
            initWithTitle:message_continue 
            delegate:self
            cancelButtonTitle:@"Reset" 
            destructiveButtonTitle:@"Continue"
            otherButtonTitles:nil];
        [actionSheet showInView:self.view];
        [actionSheet release];
        [message_continue release];
    }
}

It runs fine both in the iPhone and in the iPhone simulator, but crashes in the iPad simulator.

4

6 に答える 6

5

エラーメッセージには次のように記載されています。

満たさない無効なパラメータ: ビュー != nil

おそらくこの行から:

[actionSheet showInView:self.view];

これは iPhone では機能するが iPad では機能しないということは、iPad がこの行に到達するためにたどるコード パスは、iPhone がこの行にたどり着くためにたどるコード パスとはおそらく異なることを意味します。つまり、View Controller のviewプロパティが iPad 用に設定されていない可能性があります。

私の推測viewでは、このビュー コントローラーが使用している iPad バージョンの xib 用に、Interface Builder でアウトレットを接続するのを忘れていました。

于 2010-09-18T21:14:30.627 に答える
3

私もこの問題を抱えていましたが、 [actionSheet showInView:[self.view window]]; (キャンセルボタンの半分しか選択できないという別のバグを修正するために)使用していました。

これを条件付き[actionSheet showInView:self.view];で iPad に変更します。

iPad でもスタイルを UIActionSheetStyleBlackTranslucent にしないのが最善であることがわかりました。iPad には独自のスタイルがあり、これを設定するとキャンセル ボタンが追加されるようです (iPad のデフォルトでは表示されません)。

于 2010-11-10T11:37:45.210 に答える
0

問題は、ビューがまだ表示されていないことだと思います。それをviewDidAppearに入れてください:そしてそれはうまくいくはずです。

于 2012-01-27T00:03:48.423 に答える
0

これは古い質問ですが、今日同じ問題に遭遇しました。iPhone と iPad に共通の UIViewController の xib ファイルがあり、そのshowInViewメソッドUIActionSheetが原因で iPad アプリがクラッシュしていました。

私のためにそれを修正するのではなく、 を呼び出すことが判明しshowInViewました。iPad で viewDidLoad が呼び出されるまでに、すべての IB 接続が確立されていない可能性があります。viewDidAppearviewDidLoad

(私のUIViewControllerはUINavigationControllerにプッシュされていたので、アニメーション時間の増加が問題全体の原因なのだろうか_

于 2013-08-06T21:05:09.793 に答える
0

このようにします:

[self performSelectorOnMainThread:@selector(choosePhoto) withObject:nil waitUntilDone:NO];

-(void)choosePhoto
{

    UIActionSheet* actionSheet = [[UIActionSheet alloc] initWithTitle:@""
                                                  delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil
                                         otherButtonTitles:@"Take Photo", @"Choose from gallery", nil];
    actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
    actionSheet.tag = 1;
    [actionSheet showInView:self.view];
    [actionSheet release];
}

私のために働いた

于 2010-09-27T14:29:22.037 に答える
0

私のように、元の質問とは少し異なる方法で UIActionSheet を使用している可能性があるが、iPad ではまだ失敗している可能性がある人のために、私は以下を使用していました。

[actionSheet showFromRect:m_view.bounds inView:m_view animated:YES];
[actionSheet release];

...iPhone では動作しますが、iPad では失敗します。

この例は、両方のデバイスの特定のアプリで機能します。

[actionSheet showInView:m_view];
[actionSheet release];

よろしく、デビッド

于 2012-08-30T16:48:57.610 に答える