2017-06-20 80 views
0

我使用的持久性容器裝載數據tableviewcontroller,但每次我要保存的數據,它告訴我這樣奇怪的錯誤。的iOS核心數據NSCocoaErrorDomain 134020

錯誤發生,每次我加載其他VC(來自的TabBar)後,進入好友列表頁面。 如果我直接打開好友列表頁面,則不會發生錯誤。

注*:我在每一個視圖控制器容器初始化有權訪問的核心數據。

你能幫我嗎?

An error occurred while saving: Error Domain=NSCocoaErrorDomain Code=134020 "(null)" UserInfo={NSAffectedObjectsErrorKey=<Friend: 0x6080008954a0> (entity: Friend; id: 0x608000a33340 <x-coredata:///Friend/t78E3F129-DFFC-46DC-B542-7B2378382AB587> ; data: { 
    accepted = 1; 
    canAccept = 0; 
    name = "Foo Bar"; 
    profilePicture = nil; 
    username = foobar; 
}), 
NSUnderlyingException=Store <NSSQLCore: 0x600000375840> (URL: file:///Users/foobar/Library/Developer/CoreSimulator/Devices/69C6FA49-8B83-4289-AA3B-90D8FE065492/data/Containers/Data/Application/27388AC0-B1C6-4D25-8194-3DCA8AF4818C/Library/Application%20Support/Renungan.sqlite) cannot hold instances of entity (<NSEntityDescription: 0x60800035c510>) name Friend, managedObjectClassName Friend, renamingIdentifier Friend, isAbstract 0, superentity name (null), properties { 
accepted = "(<NSAttributeDescription: 0x6080006e9080>), name accepted, isOptional 0, isTransient 0, entity Friend, renamingIdentifier accepted, validation predicates (\n), warnings (\n), versionHashModifier (null)\n userInfo {\n}, attributeType 800 , attributeValueClassName NSNumber, defaultValue (null)"; 
canAccept = "(<NSAttributeDescription: 0x6080006e9100>), name canAccept, isOptional 0, isTransient 0, entity Friend, renamingIdentifier canAccept, validation predicates (\n), warnings (\n), versionHashModifier (null)\n userInfo {\n}, attributeType 800 , attributeValueClassName NSNumber, defaultValue (null)"; 
name = "(<NSAttributeDescription: 0x6080006e9180>), name name, isOptional 0, isTransient 0, entity Friend, renamingIdentifier name, validation predicates (\n), warnings (\n), versionHashModifier (null)\n userInfo {\n}, attributeType 700 , attributeValueClassName NSString, defaultValue (null)"; 
profilePicture = "(<NSAttributeDescription: 0x6080006e9200>), name profilePicture, isOptional 1, isTransient 0, entity Friend, renamingIdentifier profilePicture, validation predicates (\n), warnings (\n), versionHashModifier (null)\n userInfo {\n}, attributeType 700 , attributeValueClassName NSString, defaultValue (null)"; 
username = "(<NSAttributeDescription: 0x6080006e9280>), name username, isOptional 0, isTransient 0, entity Friend, renamingIdentifier username, validation predicates (\n), warnings (\n), versionHashModifier (null)\n userInfo {\n}, attributeType 700 , attributeValueClassName NSString, defaultValue (null)"; 
}, subentities { 
}, userInfo { 
}, versionHashModifier (null), uniquenessConstraints (
)} 

這裏是我的容器初始化

container.loadPersistentStores { (_, error) in 
      if let error = error { 
       print("Unable to Load Persistent Store") 
       print("\(error), \(error.localizedDescription)") 

      } else { 
       self.setupView() 

       do { 
        let acceptedPredicate = NSPredicate(format: "accepted = %@", NSNumber(booleanLiteral: true)) 
        self.fetchedResultsController.fetchRequest.predicate = acceptedPredicate 
        try self.fetchedResultsController.performFetch() 
       } catch { 
        let fetchError = error as NSError 
        print("Unable to Perform Fetch Request") 
        print("\(fetchError), \(fetchError.localizedDescription)") 
       } 

       self.updateView() 
      } 
     } 

回答

0

看起來你已經懷疑問題的原因。您無法創建指向同一文件的多個持久性容器,並期望它可以正常工作。所有不同的容器都將嘗試同時寫入文件,並會互相混淆。爲整個應用程序創建一個持久容器,並只使用它。再次運行它們以刪除損壞的文件之前,請刪除您的應用程序。

+0

我應該在哪裏創建一個持久化容器@喬恩 - 玫瑰? 我已經在每個具有函數訪問核心數據的單個視圖控制器中創建容器。 在每個控制器我做,我宣佈它在頂部'''私人設容器= NSPersistentContainer(名稱:「Renungan」)''' –

+0

無論是的appDelegate或sharedSingleton。 –

+1

這樣的'''私人設容器=(UIApplication.shared.delegate作爲!AppDelegate中).persistentContainer'''? –