我通过 JSON 从服务器获取数据并将其显示在标签上。我在 viewDidLoad 中添加了该方法。
我想在用户再次打开应用程序时刷新数据。目前,即使我在模拟器中杀死应用程序并再次启动应用程序,它也不会刷新。
我尝试了 viewDidAppear 方法,但由于某种原因它没有被执行。
-(void)viewDidAppear{
NSLog(@"Called viewDidAppear");
}
这永远不会被调用。我试图最小化该应用程序,但它没有工作。
我通过 JSON 从服务器获取数据并将其显示在标签上。我在 viewDidLoad 中添加了该方法。
我想在用户再次打开应用程序时刷新数据。目前,即使我在模拟器中杀死应用程序并再次启动应用程序,它也不会刷新。
我尝试了 viewDidAppear 方法,但由于某种原因它没有被执行。
-(void)viewDidAppear{
NSLog(@"Called viewDidAppear");
}
这永远不会被调用。我试图最小化该应用程序,但它没有工作。
您可以收听通知并做出适当的响应。尝试使用这些并确定适合您预期工作流程的方法。
UIApplicationDidBecomeActiveNotification
UIApplicationWillEnterForegroundNotification
您可以像这样使用响应通知。
[[NSNotificationCenter defaultCenter] addObserverForName: UIApplicationDidBecomeActiveNotification object: nil queue: [NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
// LOAD JSON
}];
我跟着这个教程 - 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];
}
在您的应用委托实现中,有一个方法称为:
- (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
viewDidAppear: 方法采用 bool 参数,无论视图是否显示您缺少的动画。您还必须调用超类的实现:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear: animated];
NSLog(@"Called viewDidAppear");
}