簡體   English   中英

必須從CoreData調用兩次提取

[英]Having to call fetch twice from CoreData

在模擬器和我的真實設備上,在應用終止時都會保存一串字符串。 當我重新啟動應用程序並為我的持久數據fetchRequest(通過viewDidLoad或手動按鈕操作)時,第一次嘗試時得到一個空數組。 直到我第二次fetchRequest才終於得到我的數據。

有趣的是,這個問題似乎沒有時間上的差異。 在嘗試第二次獲取之前,我嘗試設置各種超時。 我等待10秒到一分鍾,甚至是在第一次獲取之后立即都沒關系; 僅在第二次嘗試時才獲取數據。

我必須使用以下代碼來獲取數據:

        var results = try self.context.fetch(fetchRequest) as! [NSManagedObject]
        while (results.isEmpty) {
            results = try self.context.fetch(fetchRequest) as! [NSManagedObject]
        }
        return results

為了我的理智,這是一個清單:

注意**我忘了提到我正在構建一個框架。 我將CoreData與框架的包標識符一起使用,並使用框架中包含的模型,因此我想避免不得不在框架外部使用邏輯(除了在appDelegate中初始化框架)。

應該在位於appDelegate.swift中的applicationDidFinishLaunchingWithOptions中初始化Core Data堆棧,因為在嘗試獲取數據后會添加psc。

蘋果公司提供的樣板代碼包括:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) {
    /* ... */
    do {
        try psc.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: storeURL, options: nil)
    } catch {
        fatalError("Error migrating store: \(error)")
    }
}

addPersistentStoreWithType調用完成之前,保存的數據不可用,並且異步地在另一個隊列上進行。 它會在某個時候完成,但是上面的代碼正在執行。 您所看到的並不奇怪-您基本上在循環直到異步調用完成。

您需要以某種方式延遲獲取,直到永久性存儲已加載。 有兩種可能:

  1. 做一些事情有點像你已經做什么。 我希望查看持久性存儲協調器的persistentStores屬性,以查看是否已加載任何存儲,而不是反復嘗試獲取。
  2. 加載持久性存儲后發布通知,並在發生通知時進行獲取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM