代码之家  ›  专栏  ›  技术社区  ›  casillas

在不同情况下加载数据

  •  1
  • casillas  · 技术社区  · 7 年前

    我有以下实现。如您所见,我试图在三种不同的情况下通过网络操作加载数据:

    • 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];
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Raptor    7 年前

    viewDidLoad UIView 已加载。因此,仅在最初加载视图时调用一次。

    applicationEnteredForeground 从后台调用应用程序时调用一次。当应用程序返回后台(用户按下主页按钮或切换到其他应用程序)然后返回到您的应用程序时,将再次触发此通知。

    在您的情况下,您可能希望将网络函数调用同时放入 viewDidLoad视图 应用程序面向地面 就像你一样。对于 pushNotificationMessageReceived ,您应该单独处理。至少有两种可能的情况:

    1. 应用程序处于活动状态时会收到推送通知 :您可以考虑将推送通知消息作为警报处理。您仅在用户单击警报中的“确定”时加载数据,因为您可能会让他们选择不加载数据(取决于您的用户体验设计)

    2. 当你的应用程序位于后台时,会收到推送通知 :当用户单击通知横幅/警报时,应用程序将启动,并且 应用程序面向地面 将被调用。因此,无需添加 loadData 在这种情况下。

    如果你还不清楚,请告诉我。