2013-02-03 46 views
0

我正在創建一個應用程序,其中的數據需要立即從本地數據存儲顯示。當應用程序開始確定iCloud是否可用時,我會啓動後臺線程。iOS,核心數據和iCloud - 切換上下文

我到處尋找並找不到解決方案:當iCloud變得可用時,我是否可以更改persistentStore上的「選項」以開始使用iCloud事務?

我不確定在這種情況下適當的方法是什麼。我嘗試的一切都會導致應用程序崩潰。

本來我有它,所以iCloud檢查不在後臺線程和應用程序工作正常,但偶爾超時。

回答

0

您不知道何時可以使用iCloud。您只需使用數據,但不會將它們直接發送到iCloud。 iOS代替你。所以只有它知道何時以及如何發送數據。

0

不,您不能在NSPersistentStore對象存在後更改這些選項。將持久性存儲添加到NSPersistentStoreCoordinator時,您只能指定選項。最接近改變選項的是拆除整個核心數據堆棧並從不同的選項開始。

這不會幫助,不過,因爲:

  • 即使你已檢測到的iCloud可用(我使用NSFileManager猜測,無論是通過其ubiquityIdentityToken或致電URLForUbiquityContainerIdentifier:),您的通話到addPersistentStoreWithType:configuration:URL:options:error:可能會阻止一段時間。如果iCloud中有新的數據可用,它將不會開始下載,除非您添加持久性存儲,並且該方法在下載過程完成之前不會返回。有時候,iCloud只是讓這種方法阻塞一段時間,因爲沒有明顯的原因。

  • 如果您允許用戶在使用非iCloud選項時對數據進行任何更改,那麼以後這些更改將不會自動發送到雲。當iCloud處於活動狀態時數據發生變化時,核心數據僅向iCloud發送更改 - 這會使其生成事務。您必須加載並重新保存用戶所做的任何更改,否則這些更改將永遠無法完成。

不幸的是,當使用Core Data與iCloud配合使用時,您已經遇到了一個主要的絆腳石。在Core Data完成與iCloud的通信之前,您無法使整個數據存儲可用 - 因爲添加持久存儲的調用在此之前不會返回。而且你無法做任何事情來加速這個過程。如果您繼續嘗試將iCloud與Core Data結合使用,這只是您遇到的難題之一。

根據數據的性質,您可能會使用兩個數據存儲區,一個是純粹本地數據存儲區,另一個是通過iCloud同步的數據存儲區。您可以使純粹的本地數據存儲可用,而iCloud則嘗試將其行爲組合起來以實現有用。如果你堅持使用一個數據存儲,那麼你就會陷入延遲。

+0

感謝您的信息! – user2037316

+0

如果有幫助,請「接受」答案。 :) –