我需要一種方法來獲取我的用戶當前位置。iPhone核心位置架構 - 如何跨多個控制器使用它
因爲用戶有朋友,而且他們有位置數據,以及,我雖然走的正確方法是把一個位置字段在我的核心數據分貝,無論是在Friend
和User
實體。
現在,這裏就是我想:
有某種位置經理singelton的,每當我需要的準確位置我告訴他,開始CLLocationManager
更新。 (我的經理負責) 經理將保存位於Db user.location字段中的位置,並且對user.location信息感興趣的控制器將使用KVO註冊該數據。 對我來說這聽起來很不錯,除了我必須從每個需要準確位置的控制器訪問此位置singelton(爲了告訴他開始生成位置,我不希望位置更新始終都是) 。另外我儘量不要用一堆singelton調用來污染我的代碼。
我雖然也許明智的做法是將位置管理器作爲我的User
類中的一個屬性。 (顯然,如果我現在有幾個用戶在內存中,他們將共享相同的位置管理器singelton) 我會向用戶類添加另一種方法並將其稱爲「StartGettingLocation
」,現在每當某個控制器需要當前的準確位置,他可以做下列之一:
- 如果在我的控制器我有一個用戶對象(這是由其他的UIViewController傳承下去),我只是叫他「
StartGettingLocation
」方法和KVO他的位置字段。 - 如果我沒有在我的控制器中的用戶對象,我從我的數據庫中得到它,並按照上述做。
聽起來不錯?
如果是這樣,我不確定是否可以將MyLocationManager的新成員添加到我的User類(它是managedObject的子類)? 什麼是正確的方法來實現這一目標?
感謝
我不認爲你的CoreLocationManager負責發送位置更新,這是蘋果的CLLocationManager責任。我希望你的CoreLocationManager符合CLLocationManagerDelegate。然後它會決定如何將位置更新保存到數據庫或者只是發佈相關通知。是的,位置只是相對於當前登錄的用戶,因此使其他控制器KVO聽起來很合理。希望我能正確理解你。 – Idan 2012-04-03 07:10:07
你是對的。我們的CoreLocationManager不發送位置更新,它僅僅是'CLLocationManager'的包裝器。我們有方法從管理器啓動/停止CLLocationManager實例。我們還實現CLLocationManagerDelegate以更新管理器上的CLLocation屬性。對不起,如果我沒有說得很清楚。 – 2012-04-03 17:16:55
對,你怎麼讓其他控制器知道位置變化的時間?你是否發佈通知?保存到您的數據庫並讓其他KVO呢? – Idan 2012-04-04 20:39:00