iOS:应用程序带到前台时刷新数据

时间:2013-05-17 21:03:45

标签: ios viewdidload viewdidappear

我通过JSON从服务器上获取数据并将其显示在标签上。 我在viewDidLoad中添加了该方法。

我想在用户再次打开应用时刷新数据。目前,即使我在模拟器中杀死应用程序并再次启动应用程序,它也不会刷新。

我尝试了viewDidAppear方法,但由于某种原因它没有被执行。

-(void)viewDidAppear{
        NSLog(@"Called viewDidAppear");
}

这从未被调用过。我试图最小化应用程序,但它没有用。

4 个答案:

答案 0 :(得分:5)

您可以收听通知并做出适当的回应。尝试使用这些并确定适用于您的预期工作流程的内容。

UIApplicationDidBecomeActiveNotification
UIApplicationWillEnterForegroundNotification

您可以像这样使用回复通知。

[[NSNotificationCenter defaultCenter] addObserverForName: UIApplicationDidBecomeActiveNotification object: nil queue: [NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
    // LOAD JSON
}];

答案 1 :(得分:2)

我遵循了本教程 - http://leejon.es/notifying-a-viewcontroller-with-uiapplicationdidbecomeactivenotification/

首先,附加到目标视图控制器的viewWillAppear方法中的通知:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [[NSNotificationCenter defaultCenter] addObserver: self
                                             selector: @selector( appActivated: )
                                                 name: UIApplicationDidBecomeActiveNotification
                                               object: nil];

}


- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [[NSNotificationCenter defaultCenter] removeObserver:self ];
}


- (void)appActivated:(NSNotification *)note
{
    [self update];
}

答案 2 :(得分:1)

viewDidAppear:方法采用bool参数,显示视图时显示的是您缺少的动画。你还必须调用超类的实现:

- (void)viewDidAppear:(BOOL)animated
{
   [super viewDidAppear: animated];
   NSLog(@"Called viewDidAppear");
}

答案 3 :(得分:1)

在您的app delegate实现中,有一个名为:

的方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

每次启动应用程序时都会调用此方法,因此我认为它符合您的需求。如果你把代码放在这里,它应该可以工作。

此外,请注意,您不应在此处执行同步调用,因为您将延迟应用启动。

修改 只有在应用程序启动时才会调用此方法。您可以将代码放在方法中,然后从应用程序didFinishLaunchingWithOptions调用它,然后从方法中调用它:

- (void)applicationWillEnterForeground:(UIApplication *)application;

当应用程序进入前台时,将调用此方法,但不会在首次启动后调用此方法,因此请注意。

我还认为你应该从apple开发者页面检查UIApplicationDelegate方法:http://developer.apple.com/library/ios/#documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html 另外,查看应用程序状态更改: http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html