我有以下实现。如您所见,我试图在三种不同情况下使用网络操作加载数据:
viewDidLoad
applicationEnteredForeground
pushNotificationMessageReceived
我想知道我是否在以下课程中所做的不仅仅是在三个不同的地方调用网络操作。
是否存在多余的内容或任何建议或建议?
- (void)viewDidLoad {
[super viewDidLoad];
[self loadData];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(pushNotificationMessageReceived:)
name:@"restaurantOrderNotificationMessage"
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationIsActive:)
name:UIApplicationDidBecomeActiveNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationEnteredForeground:)
name:UIApplicationWillEnterForegroundNotification
object:nil];
}
- (void)applicationEnteredForeground:(NSNotification *)notification {
NSLog(@"Application Entered Foreground");
[self loadData];
}
- (void)applicationIsActive:(NSNotification *)notification {
NSLog(@"Application Did Become Active");
}
// AppDelegate notification center calls
-(void)pushNotificationMessageReceived: (NSNotification *)notification{
[self loadData];
}
答案 0 :(得分:1)
viewDidLoad
时会调用 UIView
。因此,它只在最初加载视图时调用一次。
applicationEnteredForeground
一次。当应用程序返回后台(用户按下主页按钮或切换到其他应用程序)然后返回到您的应用程序时,将再次触发此通知。
在您的情况下,您可能希望将网络函数调用放在viewDidLoad
和applicationEnteredForeground
中,就像您一样。对于pushNotificationMessageReceived
,您应该单独处理它。有两种可能的情况,至少:
当您的应用处于活动状态时收到推送通知:您可能会考虑将推送通知消息作为提醒来处理。您只在用户在警报中单击“确定”时加载数据,因为您可以选择不加载数据(取决于您的用户体验设计)
当您的应用处于后台时收到推送通知:当用户点击通知横幅/提醒时,应用将启动,并且applicationEnteredForeground
将被调用。因此,在这种情况下无需添加loadData
。
如果你还不清楚,请告诉我。