0

メインのストーリーボードのラベルに最新のプッシュ通知を表示するのが好きです。このコードを使用して、AppDelegate.mにアラートメッセージを表示します。

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    NSDictionary *test =(NSDictionary *)[userInfo objectForKey:@"aps"];
    NSString *alertString =(NSString *) [test objectForKey:@"alert"];
    NSLog(@"String recieved: %@",alertString);


    UIApplicationState state = [[UIApplication sharedApplication] applicationState];

    if (state == UIApplicationStateActive) {
        UIAlertView *alertmessage=[[UIAlertView alloc]initWithTitle:@"Geier"
                                                            message:alertString                                                   delegate:self
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];


        [alertmessage show];

        AudioServicesPlaySystemSound(1002);


    }

}

ViewController.mファイルでこれを試しましたlatestpush.text = @"%@",alertString;が、機能しません。

誰かが私を助けることができますか?

ありがとう:)

4

1 に答える 1

1

ビュー コントローラーでテキストを使用できるようにする必要があります。

内部からアラート メッセージを含むカスタム NSNotification を送信することで、これを行うことができます。application:didReceiveRemoteNotification:

[[NSNotificationCenter defaultCenter] 
        postNotificationName:@"PushAlertNotification" 
        object:self
        userInfo:@{@"alertString":alertString}];

ビュー コントローラーの viewDidLoad メソッドで、オブザーバーとして登録します。

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

updateStoryboard:View Controllerでメソッドを作成します。

- (void) updateStoryboard:(NSNotification *) notification {
    self.latestpush.text = notification.userInfo[@"alertString"];
}

別の解決策は、ViewController をオブザーバーとして受け取る AppDelegate にプロパティを作成することです。

AppDelegate.h (ViewController を VC の実際のタイプに変更します)。

@property (nonatomic, weak) ViewController *observer;

ViewController 内で、NSString を受け入れるメソッドを作成し、そのメソッドでストーリーボードを更新します。

ViewController.m

-(void)updateStoryboard(NSString *alertString) {
   self.latestpush.text = alertString;
}

また、ViewContoller の viewDidLoad メソッドで、自分自身を appDelegate に登録します。

- (void)viewDidLoad {
    [super viewDidLoad];
    AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
    delegate.observer = self;
}

application:didReceiveRemoteNotification:メソッド内で updateStoryboard を呼び出します。

[self.observer updateStoryboard:alertString];

于 2012-12-23T11:31:38.173 に答える