0

ユーザーがアプリをしばらく開いていない場合、ローカル通知を使用しているアプリを使用しています。

ユーザーがローカル通知を介してアプリを開くと、DB が更新され、ユーザーのアカウントにクレジットが付与され、「余分なクレジットがあります」というアラートが表示されます。

DB でクレジットが更新される ユーザーが [OK] をクリックしてもビューコントローラーが更新されず、その時点でラベルに更新されたクレジットが表示されません。

別のビューに移動して戻ってくると、それが表示されます。

ユーザーが AlertView から [OK] をクリックしたときに更新されたスコアを取得するにはどうすればよいですか?

前もって感謝します....

編集

[[UIApplication sharedApplication]cancelAllLocalNotifications];
    NSDate *today=[NSDate date];
    NSLog(@"%@",today);
    NSDateFormatter *dateFormat1 = [[NSDateFormatter alloc] init];
    [dateFormat1 setDateFormat:@"dd-MMM-yyyy hh:mm:ss a"];

    NSTimeInterval secondsInEightHours =  20;


    NSString *tt=[dateFormat1 stringFromDate:today];
    //tt=@"20-Apr-2013 06:39:32 PM";
    NSDate *Ass_date=[dateFormat1 dateFromString:tt];
    Ass_date=[Ass_date dateByAddingTimeInterval:secondsInEightHours];


    NSLog(@"%@",tt);
    NSLog(@"%@",today);
    NSLog(@"%@",Ass_date);
    //[[UIApplication sharedApplication]cancelAllLocalNotifications];
    UILocalNotification *localNotif1 = [[UILocalNotification alloc] init];
    [[UIApplication sharedApplication]cancelLocalNotification:localNotif1];
    if (localNotif1 == nil)
        return;
    localNotif1.fireDate = Ass_date;
    localNotif1.timeZone = [NSTimeZone defaultTimeZone];

    // Notification details
    localNotif1.alertBody = @"You have not played for a long time. Play and get 250 Stars credits for free!";
    // Set the action button
    localNotif1.alertAction = @"Get It Now";

    localNotif1.soundName = UILocalNotificationDefaultSoundName;
    //localNotif.applicationIconBadgeNumber = 1;
    //localNotif1.applicationIconBadgeNumber ++;
    // Schedule the notification
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotif1];
    [localNotif1 release];

これは、viewcontroller の ViewDidAppear で行ったコードです。

今、アプリケーション didReceiveLocalNotificationのデリゲートで: アラートを表示しました。

        [self localNotif];
        ////NSLog(@"Recieved Notification %@",localNotif);
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"" message:@"250 Stars have been credited to your account" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];

        [alert show];
        [alert release];



    }

アラートの [OK] ボタンをクリックすると、View Controller を更新または再読み込みしたい。

4

3 に答える 3

2

NSNotificationクレジットを更新した場所から (ローカル通知とは異なります) を送信します。その通知をUIViewController登録して、その表示を更新します。

投稿する標準的な通知の例:

[[NSNotificationCenter defaultCenter] postNotificationName:@"MyAppCreditsUpdatedNotification" object:nil];

受け取るには (これはビュー コントローラーに入ります):

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateCredits:) name:@"MyAppCreditsUpdatedNotification" object:nil];

これをdeallocに入れることを忘れないでください:

[[NSNotificationCenter defaultCenter] removeObserver:self];
于 2013-05-30T10:10:07.370 に答える
1

あなたにAppDelegate

  - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {    
       [[NSNotificationCenter defaultCenter] postNotificationName:@"creditsUpdated" object:nil];
    }

あなたのviewcontroller

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateScore:) name:@"creditsUpdated" object:nil];

updateScore:ユーザーがローカル通知で「OK」ボタンをタップするたびにメソッドが呼び出されるようになりました。ここでラベルを更新できます。お役に立てれば。

于 2013-05-30T10:13:12.617 に答える
0

問題は、DB を更新しているが、viewContoller.

を更新またはリロードするだけですviewController

これを試してください、これはあなたを助けるかもしれません。

[self.view setNeedsDisplay];

または、完全にリロードする代わりに、「OK」ボタンをクリックしたときViewControllerに値を手動で変更できますlabel

[yourLabel setText:UpdatedValue];
于 2013-05-30T10:12:25.263 に答える