2

アプリケーションを起動する前に、ユーザーに同意を求めています。したがって、appDelegate.mには次のものがあります。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    defaults = [NSUserDefaults standardUserDefaults];

    if(![defaults boolForKey:@"warningAccepted"]){
        UIAlertView *alert;
        alert = [[[UIAlertView alloc] initWithTitle:@"Warning" message:@"Message... To continue, select \"OK\". To close the app, select \"Cancel\"." delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil] autorelease];
        [alert show];
    }

    return YES;
}

- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == 0){
        [defaults setBool:YES forKey:@"warningAccepted"];
        [defaults synchronize];

        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
            [window addSubview:mainNavController.view];
        } else {
            [window addSubview:tabBarController.view];
        }

        [window makeKeyAndVisible];
    } else {
        // Close App, User hit cancel.
        UIAlertView *alert;
        alert = [[[UIAlertView alloc] initWithTitle:@"App Cannot Continue" message:@"The application cannot run until warning is accepted." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil] autorelease];
        [alert show];
    }

}

1つの問題は、ユーザーがキャンセルを押したときにelseが呼び出されないことです。もう1つの問題は、アプリの続行を停止する方法がわからないことです。私が見つけたところによると、Appleはあなたにアプリケーションを強制的に閉じることを望んでいません。あれは正しいですか?これをどのように実装すればよいですか?皆様のご協力に感謝いたします。

4

4 に答える 4

4

はい、強制終了した場合、Appleはアプリケーションを拒否します。私は言うことができます;-)ユーザーが受け入れることなしに続行することはできないと言っている別のUIAlertViewはトリックをデする必要があります(ユーザーがそれを閉じることができないようにボタンを置かないでください)

elseスコープについては、通過しないのですか、それともUIAlertViewが表示されないのですか?ブレークポイントで確認してください。さらに(buttonIndex == 0)、ユーザーが「キャンセル」ボタンに触れたことを意味する場合ではありません

于 2011-01-17T20:35:35.543 に答える
2

代わりに、このデリゲートメソッドを使用して成功しました。

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex

また、正しいボタンを処理できるように、アプリケーションがalertViewのcancelButtonIndexプロパティとfirstOtherButtonIndexプロパティを使用していることを確認してください。キャンセルボタンは現時点では通常インデックスゼロだと思いますが、これは変更される可能性があります。

于 2011-01-17T20:41:02.437 に答える
1

EULAを処理するための推奨される方法は、アプリケーションをiTunesに送信するときにEULAを送信することです。これにより、エンドユーザーはアプリケーションをダウンロードする前にEULAを読むことができます。

アプリケーションを使用する前にユーザーにEULAに同意するように強制する場合は、アプリケーション内に埋め込むことができるHTMLファイルに契約を挿入する必要があります。アプリの起動時にUIWebViewにHTMLを表示します。(ほんの数行のコードです。)それをアラートに絞り込もうとしないでください。

アプリケーションを「終了」することは許可されていません。ツールバーの「承認」および「拒否」オプションを使用して、またはWebページのボタンとしてEULAをWebビューに表示することをお勧めします。ユーザーが[拒否]を選択すると、デバイスからアプリを削除するように求めるアラートをポップできます。アイデアは、Webビューをスクロールすることはできますが、acceptを押すまで続行しないということです。

Appleがこれを許可するかどうかはわかりませんが、エンドユーザーを苛立たせることは間違いありません。

于 2011-01-17T21:54:24.023 に答える
0

問題2の場合:はいAppleはアプリを終了したくありません。しかし、ユーザーに自分でアプリを終了させるためにできることは、空白の画面を表示することだけです。しかし、「機能がない」と見なされる可能性があるため、Appleがこれを許可するかどうかはわかりません。

于 2011-01-17T20:34:51.257 に答える