2016-02-19 29 views
1

從時間在我的項目出現錯誤很少(如每隔100個請求)的時間。我的一些CoreData的請求有data:<fault>,我無法使用這些數據。我不明白爲什麼會發生這種情況,以及如何防止這種行爲。罕見的錯誤,而讀CoreData:數據:在CoreData結果<fault>

錯誤數據輸出例如:

<NSManagedObject: 0x147ea09b0> (entity: ToDo; id: 0xd000000002f40000 <x-coredata://7B4FEA6E-1B36-467E-BE14-53CC2EE8CE21/ToDo/p190> ; data: <fault>) 

正常輸出是一樣的東西:

<NSManagedObject: 0x147ea0790> (entity: ToDo; id: 0xd000000002f40000 <x-coredata://7B4FEA6E-1B36-467E-BE14-53CC2EE8CE21/ToDo/p189> ; data: { 
    created = "2016-02-19 15:04:42 +0000"; 
    text = "Some Text"; 
}) 

我得到的數據有:

let fetchRequest = NSFetchRequest(entityName: "Example") 

var examples:[NSManagedObject] 

do { 
      let results = 
      try self.managedContext.executeFetchRequest(fetchRequest) 
      examples = results as! [NSManagedObject] 
} catch let error as NSError { 
      print("Could not fetch \(error), \(error.userInfo)") 
} 

的問題是從實例結果。代碼不會在catch語句中跳轉。這些示例與預期數據具有相同的長度。在我的下一個請求中,所有數據仍然存在。什麼都沒有丟失。唯一的問題是這個數據對於這個唯一的請求是空的。

我的問題是在Swift中。但我猜目標C可能會有同樣的問題。

任何幫助。先謝謝你!

+0

故障(https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/FaultingandUniquing.html)與核心數據工作的預期部分管理對象。當訪問持久性屬性時,故障將觸發並加載其數據。你在做什麼,這使你成爲一個問題? – Jonah

+0

我和其他所有請求一樣。我加載一些數據。就像我說的,它在99%的案例中都有效。我不知道這1%有什麼不同。我只能重新創建這個bug,如果我多次重複做同樣的事情。沒有什麼變化。我知道我可以通過簡單的檢查結果來解決這個問題,但我想了解問題以完全防止它出現 –

+0

如上所述,這是*沒有錯誤*。只要您訪問對象的任何屬性,如果需要,對象將從持久性存儲中完全初始化。有關類似問題,請參閱http://stackoverflow.com/questions/12399910/how-to-show-detailed-info-inside-nslog-in-coredata-suggest-me-a-solution。 –

回答

0

,我解決我的問題,或者更好,我知道我做錯了什麼。

的問題是,我打電話給在很短的時間很多coredata請求。它似乎有一個限制。我只是設置了最大數量的並行請求,問題再也沒有出現過。

1

您可以使用

fetchRequest.returnsObjectsAsFaults = false 

,併爲您如果任何人在讀這訪問對象使用

print(yourObject.valueForKey("yourKey") 
+0

我試過了。數據是錯誤的。 –