我最近进入了iOS开发阶段。我已编写了我的第一个应用程序,当您使用地理围栏进入某个位置时,该应用程序会提醒您。
我的应用程序包含一个故事板,有三个视图:
GeofenceTableViewController.m文件包含用于创建,编辑和删除地理围栏的代码。它还具有在输入或退出地理围栏时生成通知的代码。这工作正常,我已经多次测试了。
问题在于: 每当我在iOS模拟器中,只要我查看GeofenceTableViewController视图,应用程序就会按预期生成通知并写入调试日志,但如果我查看这两个中的任何一个其他视图和我更改模拟器的位置,应用程序没有任何反应。
所以我想知道的是,即使该类在iOS模拟器屏幕上不可见,如何保持GeofenceTableViewController方法运行。
这里有一个视频,展示了我在特定视图中的处理方式,并且我更改了xcode的位置,该应用会创建一个通知(延迟3秒),以及当我&# 39; m在另一个视图上(当我按下"产品"按钮),并更改xcode的位置时,应用程序不会创建通知,除非我重新输入&#34 ;位置"视图(当我按下底部的+符号时)。
https://www.youtube.com/watch?v=5taaO8UAiLc
我有什么非常普遍的缺失吗?或者你们需要看看代码以帮助我吗?
请告诉我。
非常感谢!
答案 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];
}