2014-06-19 71 views
0

我最近進入了iOS開發場景。我編寫了我的第一個應用程序,當您使用地理圍欄輸入特定位置時,會提醒您。讓故事板的UITableViewController在不可見時運行

我的應用程序由一個故事板的,有三個意見:

  • ToDoListTableViewController
  • AddToDoItemViewController
  • GeofenceTableViewController

的GeofenceTableViewController.m文件具有代碼來創建,編輯和刪除地理圍欄。它還具有在進入或退出地理圍欄時生成通知的代碼。這是行得通的,我已經測試過好幾次了。

問題出在這裏: 每當我在iOS模擬器中,只要我正在查看GeofenceTableViewController視圖,應用程序就會按照預期生成通知並寫入調試日誌,但如果我正在查看任何的其他兩個視圖,我改變了模擬器的位置,沒有發生應用程序。

所以我想知道的是,如何保持GeofenceTableViewController方法運行,即使該類不是在iOS模擬器屏幕上可見的。

下面是一段視頻,演示了當我處於特定視圖時,如何更改xcode的位置,應用程序創建通知(延遲3秒),以及當我處於另一視圖時(當我按下「產品」按鈕),並更改xcode的位置,除非我重新進入「位置」視圖(當我按下底部的+符號)時,應用程序纔會創建通知。

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

有什麼很一般,我失蹤?或者你們需要查看代碼才能幫助我?

請讓我知道。

非常感謝!

+0

@rdelmar我控制拖着+符號按鈕,GeofenceTableViewController,並選擇PUSH。我想這就是所謂的塞格?這樣做會自動在GeofenceTableViewController中創建一個「返回」按鈕,這是我用來返回的。 –

回答

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]; 
} 
+0

我控制 - 將+符號按鈕拖動到GeofenceTableViewController,並選擇PUSH。我想這就是所謂的塞格?這樣做會自動在GeofenceTableViewController中創建一個「返回」按鈕,這是我用來返回的。 編輯:非常感謝,我將搜索如何防止控制器被釋放。 –

+0

這是我所提供的嗎?我想確定這篇文章是否會在嘗試之前幫助我,因爲我是iOS新手。再次感謝! http://stackoverflow.com/questions/9151785/viewcontroller-gets-deallocated-which-leads-to-crash –

+0

@FranciscoJavierHerrera,你實例化控制器的方式在該鏈接中是正確的,但它需要在if聲明來檢查該屬性是否爲零(這是在第一次執行推送之前)。所以你檢查一下屬性是否爲零,如果是這樣的話,那麼執行這個操作。如果不是零,只需按下即可。 – rdelmar

相關問題