保持故事板的UITableViewController在不可见的情况下运行

时间:2014-06-19 03:52:25

标签: ios objective-c uitableview

我最近进入了iOS开发阶段。我已编写了我的第一个应用程序,当您使用地理围栏进入某个位置时,该应用程序会提醒您。

我的应用程序包含一个故事板,有三个视图:

  • ToDoListTableViewController
  • AddToDoItemViewController
  • GeofenceTableViewController

GeofenceTableViewController.m文件包含用于创建,编辑和删除地理围栏的代码。它还具有在输入或退出地理围栏时生成通知的代码。这工作正常,我已经多次测试了。

问题在于:  每当我在iOS模拟器中,只要我查看GeofenceTableViewController视图,应用程序就会按预期生成通知并写入调试日志,但如果我查看这两个中的任何一个其他视图和我更改模拟器的位置,应用程序没有任何反应。

所以我想知道的是,即使该类在iOS模拟器屏幕上不可见,如何保持GeofenceTableViewController方法运行。

这里有一个视频,展示了我在特定视图中的处理方式,并且我更改了xcode的位置,该应用会创建一个通知(延迟3秒),以及当我&# 39; m在另一个视图上(当我按下"产品"按钮),并更改xcode的位置时,应用程序不会创建通知,除非我重新输入&#34 ;位置"视图(当我按下底部的+符号时)。

https://www.youtube.com/watch?v=5taaO8UAiLc

我有什么非常普遍的缺失吗?或者你们需要看看代码以帮助我吗?

请告诉我。

非常感谢!

1 个答案:

答案 0 :(得分:0)

您只需要保持该控制器(Geofence)不被释放。你如何做到这一点取决于你的控制器层次结构,但一些对象需要保持一个强大的指针。如果它是从AddToDoItemViewController推送或呈现的,那么该控制器应该有一个指向它的属性,并且只在第一次推送或呈现它时实例化控制器:你必须进行手动演示或推送,而不是这样做因为他们总是实例化新的控制器。当然,如果按照你的方式进行,你必须确保AddToDoItemViewController也不会被解除分配。

这样做了,

-(IBAction)pushToGeofence:(id)sender {
    if (! self.gvc) { // gvc is a property, @property (strong,nonatomic) GeofenceViewController *gvc
       self.gvc = [self.storyboard instantiateViewControllerWithIdentifier:@"Geofence"];
    }
    [self.navigationController pushViewController:self.gvc animated:YES];
}