2

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

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

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

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

这永远不会被调用。我试图最小化该应用程序,但它没有工作。

4

4 回答 4

5

您可以收听通知并做出适当的响应。尝试使用这些并确定适合您预期工作流程的方法。

UIApplicationDidBecomeActiveNotification
UIApplicationWillEnterForegroundNotification

您可以像这样使用响应通知。

[[NSNotificationCenter defaultCenter] addObserverForName: UIApplicationDidBecomeActiveNotification object: nil queue: [NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
    // LOAD JSON
}];
于 2013-05-17T21:11:41.157 回答
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];
}
于 2013-05-19T18:53:00.097 回答
1

在您的应用委托实现中,有一个方法称为:

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

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

另外,请注意您不应该在此处执行同步调用,因为您会延迟应用程序的启动。

编辑: 这个方法只会在应用程序启动时被调用。您可以将代码放在一个方法中,并从应用程序 didFinishLaunchingWithOptions 调用它,然后也从该方法调用它:

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

该方法会在应用程序进入前台时调用,但不会在第一次启动后调用,请注意。

我还认为你应该从苹果开发者页面检查 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

于 2013-05-17T22:13:11.743 回答
1

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

- (void)viewDidAppear:(BOOL)animated
{
   [super viewDidAppear: animated];
   NSLog(@"Called viewDidAppear");
}
于 2013-05-17T21:16:51.897 回答