0

appDelegateからalertViewを作成しようとしていますが、機能させることができません。alertViewは、アプリが初めて起動したときに免責事項として機能します。動作させることができません。introViewcontrollerが表示されません。私は何が間違っているのですか?ps。私はnibファイルであるintoViewControllerを除いてストーリーボードを使用しています。私のルートビューコントローラーは「fisrtViewController」です。ここに私のコードがあります。ありがとうございます。

int a;

およびdidFinishLaunchingWithOptionsで

    if ( a == 0) {

UIAlertView *disclaimer = [[UIAlertView alloc] initWithTitle:@"Read Before use" message:@"By using this app you agree to its terms and conditions.\n\n\n\n\n\n\n\n\n\n\ntext heren\n\n\n\n\n\n\n\n\n\n\n\n\n" delegate:self cancelButtonTitle:@"No!" otherButtonTitles:@"Yes Let me In", nil];

[disclaimer show];
}


// Override point for customization after application launch.
return YES;
}

-(void) alertView:(UIAlertView *) alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex == 1) {
  //  FirstViewController *firstView = [[FirstViewController alloc] init];
    a+=1;
  //  [self.viewController presentModalViewController:firstView animated:YES];
}
else if (buttonIndex == 2) {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sorry!" message:@"You are not allowed to use this app due to the fact that you did not agree to the terms and Conditions. Please exit this app!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [alert show];

if (buttonIndex ==1) {
       introViewController *intro = [[introViewController alloc] initWithNibName:@"introViewController" bundle:nil];
       [self.viewController presentModalViewController:intro animated:YES];
   introViewController *intro = [[introViewController alloc] initWithNibName:@"introViewController" bundle:nil];
   [self.viewController presentModalViewController:intro animated:YES];
}
}
4

3 に答える 3

1

ああ...今、私はあなたが何をしようとしているのか理解しています。

問題はself.viewController、新しいモーダルViewControllerを提示しようとする前に設定されていないことです。また、あなたのbuttonIndexは1つだと思います。

代わりに試してください:

if (buttonIndex == 1)
    {
        _window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        introViewController *intro = [[introViewController alloc] initWithNibName:@"introViewController" bundle:nil];
        _window.rootViewController = _intro;
        [_window makeKeyAndVisible];
    }

あなたの問題はとは何の関係もないのでUIAlertView、同様の問題に苦しんでいる他の人のために、あなたはあなたの質問のタイトルと説明をより明確にするために変更したいかもしれません。

ハッピーコーディング!:)

于 2012-09-23T21:28:18.430 に答える
1

これを処理する最良の方法は、NSUserDefaultsファイルへのNSString値の書き込みを使用します。アプリが初めて免責事項を受け入れて起動したとき(例:@ "accept")、ユーザーが受け入れない場合は、それに応じてそのNSString値も更新します(@ "notAccept")。

didFinishLaunchingWithOptionsで

if (![[[NSUserDefaults standardUserDefaults]valueForKey:@"key_disclaimer"] isEqualToString:@"accepted"]) {  
UIAlertView *disclaimer = [[UIAlertView alloc] initWithTitle:@"Read Before use" message:@"By using this app you agree to its terms and conditions.\n\n\n\n\n\n\n\n\n\n\ntext heren\n\n\n\n\n\n\n\n\n\n\n\n\n" delegate:self cancelButtonTitle:@"No!" otherButtonTitles:@"Yes Let me In", nil];   
[disclaimer show];
[disclaimer release];  
//        make sure to release it.  
}

//ユーザーが免責事項を受け入れる場合。
[[NSUserDefaults standardUserDefaults] setValue:@ "accepted" forKey:@ "key_disclaimer"];
//ユーザーが免責事項を受け入れない場合、[[NSUserDefaults standardUserDefaults] setValue:@ "notAccepted" forKey:@ "key_disclaimer"];

それに応じて「key_disclaimer」を更新します。それが最善の方法です。あなたの例では、一時的に使用することの価値。アプリを閉じて再起動すると、免責事項が再度表示されます。

コード内
inta; int a=0
を使用して置き換えます。
大丈夫でしょう。
ありがとう。

于 2012-09-23T17:46:20.773 に答える
1

コードが上記で記述したものとまったく同じである場合、aは0にはなりません。起動時に明示的に0に設定しない場合は、任意の値になる可能性があります。

インストール後にアプリが初めて開かれたかどうかを確認する場合は、NSUserDefaultsを使用します(例:didFinishWithOptions)。

int startCount=[[NSUserDefaults standardUserDefaults] intForKey:@"startCount"];
if (startCount==0]){
  //Is the first start, show your agreement
  //Then increase startCount so that this will not be called at next start
  [[NSUserDefaults standardUserDefaults] setInteger:startCount++ forKey:@"startCount"];
} 

NSUserDefaultsにバージョン番号を保存することもできます。このようにして、ユーザーが最初に新しいバージョンを開始したかどうかを確認できます。

于 2012-09-23T17:46:26.830 に答える