0

我喜欢在我的主 StoryBoard 的标签中显示最新的推送通知我使用此代码在我的 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:并在视图控制器中创建方法:

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

另一种解决方案是在您的 AppDelegate 中创建一个属性,该属性将 ViewController 作为观察者。

AppDelegate.h(将 ViewController 更改为 VC 的实际类型)。

@property (nonatomic, weak) ViewController *observer;

在 ViewController 中创建一个接受 NSString 的方法并让该方法更新您的 Storyboard。

视图控制器.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;
}

在您的方法中调用 updateStoryboard application:didReceiveRemoteNotification:

[self.observer updateStoryboard:alertString];

于 2012-12-23T11:31:38.173 回答