2011-10-31 89 views
3

我在蘋果開發者部分讀了很多關於核心數據,並在這裏對堆棧溢出,我想請教幾個問題之前,我開始試圖實現他們到我的應用程序,此時的作品只有編程數據。轉化編程數據應用爲核心的數據應用

應用想法是:用戶是一名賽車手。他駕駛不同的賽道。每個電路都有幾條命名曲線,以一定的速度和一定的效率驅動。 因此,應用程序必須存儲電路,每個電路的許多曲線以及通過存儲最高速度和效率的單獨曲線(例如字符串「Outstanding」「Good」「Bad」)的許多(如200個)驅動通路。在應用程序中,排隊使用的是排隊,最後意味着一旦您達到200次傳動通過,就可以改進統計數據隨時間和駕駛員的體驗。

我已經創建了具有適當參數和關係的實體。現在

用於起動機,我想限定的樣本電路,這是在第一次啓動該應用程序的創建和與用戶改變或inputed數據加載然後稍後。

1 - 我猜因爲數據量並不大,我可以在第一次運行時生成數據,將其存儲到核心數據中,然後在應用程序的每次啓動時以某種方式檢查覈心數據是否存在以及基於此創造新的或使用電流。我讀了關於將數據存儲到plist並通過xml和東西導入它們,但我不需要這樣做嗎?我可以創建,保存,然後檢查是否存在某些數據以確定這是第一次應用程序啓動還是不啓動?

2 - 我不確定如何將隊列保存到核心數據。此刻,我在我的腦海中設計了這樣一個觀點,即每個曲線的隊列將由具有多對一關係的Drivethrough實體組成,這些實體與一個名爲index的參數的曲線關聯,以便我知道哪個驅動器是第一個,哪個是最後一個。我不確定那麼我將如何實現刪除第一個驅動器的隊列能力。我將被迫加載所有數據,在隊列中處理它,然後將所有數據保存到核心數據中?或者它會接受某種排除第一個驅動器並重新計算索引的方式?

3 - 我是正確的說,我所有的數據加載應在「viewWillAppear中」我的視圖控制器進行?並在用戶按下每個驅動器的保存或輸入按鈕後立即保存它們?

我不要求代碼,我只是很想有人告訴我,這通常是一個好方法,或者如果你會做截然不同。

謝謝。然後在外部plist文件

回答

1

1)存儲數據經由+dictionaryWithContentsOfURL:導入到NSDictionary然後通過這個字典迭代和導入到您的核心數據存儲不是必要在這種情況下。如果你想要在外部串行化你的電路數據,這將是必要的,這樣用戶可以導入電路,或者你可以通過編輯plist中的XML數據來手工更改初始電路。

2)在iOS-5.0之前,實體以核心數據存儲爲無序的NSSet。如果您的目標是iOS 4.x,則需要添加一個屬性以將訂單存儲在隊列中,以便計算最後添加的項目。您還必須編寫一個方法來搜索實體並返回最高編號的排序屬性,以便您知道如何使用下一個drivethrough排序屬性。如果你的目標是iOS 5。0,您可以將關係標記爲NSOrderedSet。請參閱:Core Data Release Notes for iOS 5.0 - Managed Objects

3)運行數據加載代碼-viewWillAppear:取決於它需要多長時間來生成或加載數據。如果需要大量時間,則不會同步執行此操作,因爲它會阻塞主線程。如果代碼在-viewWillAppear:中運行,則UIKit將運行。如果時間不平凡(至少在100-200ms之間) ,您將需要在後臺線程中生成數據,該後臺線程可以在-viewWillAppear:中啓動。最簡單的方法是使用Dispatch Queuedispatch_async()

+0

你是不是說-viewDidAppear:對於後臺線程?或者你的意思是真的 - viewWillAppear:因此我不明白嗎? – Glademist

+0

如果您將數據加載到'-viewDidAppear:'中並顯示活動或進度指示器視圖,則這不是問題。但是我擔心的是,如果加載過程花費太長時間,'-viewWillAppear:'在加載代碼完成之前不會返回(除非在後臺線程中運行)。 – Andrew

+0

我現在明白了,非常感謝。 – Glademist