2010-04-19 51 views
6

我有一個應用程序,其中包含核心數據中的一些位置,並且我想按照與用戶位置接近的順序將它們展示給用戶。我正在使用NSFetchedResultsController將位置提供給Table View。我想到了創建返回從用戶位置的距離,將使用「全局」 CoreLocationManager來計算虛擬訪問方法,但它與原因崩潰:按用戶位置對NSFetchedResultsController結果進行排序

終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,原因:「的keyPath distanceFromCurrentLocation在實體沒有發現< NSSQLEntity位置ID = 4>

我也給用戶按字母順序排序的選項,所以,我寧願它,如果我不停的NSFetchedResultsController如果可能的話。

我應該怎麼做?

謝謝!

回答

1

除非您在實體中定義了臨時屬性,否則虛擬存取器將無法在Core Data中使用。 NSFetchedResultsController(和所有其他核心數據操作)在嘗試執行任何操作之前查看實體圖。如果虛擬屬性沒有出現在實體定義中,那麼NSFetchedResultsController將報告沒有這樣的屬性存在。

您希望在名稱爲distanceFromCurrentLocation的實體中定義一個transient屬性,並且您應該能夠編寫虛擬訪問器並讓NSFetchedResultsController查看它。

+0

當使用瞬態屬性時,我得到了同樣的崩潰。只有當它成爲一個標準的屬性,它確實工作,但那麼它的概念錯誤,我想.. – cgp 2010-04-25 20:25:41

+0

不知道你想要做什麼。您是在Core Data實體中存儲位置還是試圖使用Core Data來組織位置以便在表中顯示而不先將它們插入實體中?如果它晚了,那麼這將無法正常工作。 – TechZen 2010-04-25 21:49:25

1

我試圖做同樣的事情,按距離位置排序結果。這裏是我的問題之一:

Core Data and Core Location

原來,你必須加載所有的位置到內存中對它們進行比較。我結束了使用SQLite,這是更難實現,但使我對這種功能的頭痛少得多。

這可能不是你想要的答案,但如果你有一個大的數據集,我建議SQLite。它最終能夠更快更輕鬆地爲我處理。

+0

不幸的是SQLite不適合我,因爲我需要使用現有的Core Data數據庫......感謝提示;) – cgp 2010-04-25 20:27:33

3

NSFetchedResultsController的問題(或缺少的功能)是缺少對排序順序和節鍵路徑使用瞬態屬性的功能。

我這個掙扎一樣,所以你可能會感興趣的:

NSFetchedResultsController sections localized sorted

我敢肯定,你可以使用這種方法,以及如果你能保證有限的一組記錄。但我真的很想看到更復雜的解決方案。

相關問題