2016-11-30 66 views
2

我已經將數據模型和核心數據添加到了我現有的項目中,並且我可以成功編寫對象並保存它們/插入,但是我不能只在數據庫中獲取什麼。我究竟做錯了什麼?或者我誤解了Core Data的工作原理?核心數據 - 無法首先插入

我可以插入一個對象,然後用下面的代碼獲得所需的結果 - 但是我無法首先檢索沒有使用插入的對象。我想存儲一個「令牌」,以便應用程序記住它。

let dc = DataController() 
let moc = dc.managedObjectContext 

let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Token") 
//fetchRequest.returnsObjectsAsFaults = false 

do { 
    let entities = try moc.fetch(fetchRequest) as! [NSManagedObject] 
    print(entities.count) // prints 0 
    print(entities) // prints [] 
    for entity in entities { 
     print(entities.count) // these dont work because of 0 results 
     print(entity) // these dont work because of 0 results 
    } 
} catch { 
    print("could not fetch") 
} 

調試日誌:

0 
[] 
CoreData: annotation: Connecting to sqlite database file at "/Users/xxxx/Library/Developer/CoreSimulator/Devices/1231231-123123-123123-123123-123123123/data/Containers/Data/Application/123123-123123-123123-123123-123123123/Documents/DataModel.sqlite" 
CoreData: sql: SELECT TBL_NAME FROM SQLITE_MASTER WHERE TBL_NAME = 'Z_METADATA' 
CoreData: sql: pragma recursive_triggers=1 
CoreData: sql: pragma journal_mode=wal 
CoreData: sql: SELECT Z_VERSION, Z_UUID, Z_PLIST FROM Z_METADATA 
CoreData: sql: SELECT TBL_NAME FROM SQLITE_MASTER WHERE TBL_NAME = 'Z_MODELCACHE' 
CoreData: annotation: Disconnecting from sqlite database. 

我已經打開了sqlite的文件和我以前所插入的對象都存在那裏。

+0

爲什麼你認爲你能取來自空數據庫的數據? – shallowThought

回答

1

你可以這樣做來檢索數據。

func retriveSaveData(){ 

    let request:NSFetchRequest<TestData> = TestData.fetchRequest() 
    do { 
     let data = try managedObjectcontext.fetch(request) as [TestData] 

     if let str = data.first?.name{ 
      // Your retrieve data 
      print(str) 
     } 
    }catch{ 
     let error = error as NSError 
     print("\(error)") 
    } 
} 

用於保存和更新數據。

func saveToDataBase(data:[TestData]){ 
     for data1 in data{ 

      let request:NSFetchRequest<TestData> = TestData.fetchRequest() 
      do { 
       let count = try managedObjectcontext.count(for: request) 
       if count == 0 { 
        // save data according to your requirement. 
        print(data1) 
       }else{ 

        //if anything you want to update then wright here 
       } 

      }catch{ 
       let error = error as NSError 
       print("\(error)") 
      } 
     } 
    } 

希望它會幫助你

+0

謝謝!它現在有效! –

+0

進一步我添加更新和保存數據。 –

0

既然你知道你正在尋找持久存儲的實體,確保NSFetchRequest(也就是現在的斯威夫特3通用)是一個令牌對象:

let fetchRequest = NSFetchRequest<Token>(entityName: "Token") 

你還不如將它轉換爲一個令牌項目,以及:

let entities = try moc.fetch(fetchRequest) as! Token