Ios 核心数据-can';不先插入就无法获取

Ios 核心数据-can';不先插入就无法获取,ios,swift,core-data,swift3,Ios,Swift,Core Data,Swift3,我已经将数据模型和核心数据添加到我现有的项目中,我可以成功地编写对象并保存它们/插入,但我不能只获取数据库中的内容。我做错了什么?还是我误解了核心数据的工作原理 我可以插入一个对象,然后使用下面的代码获得所需的结果-但是如果不先使用insert,我无法检索对象。我想存储一个“令牌”,以便应用程序记住它 let dc = DataController() let moc = dc.managedObjectContext let fetchRequest = NSFetchRequest<

我已经将数据模型和核心数据添加到我现有的项目中,我可以成功地编写对象并保存它们/插入,但我不能只获取数据库中的内容。我做错了什么?还是我误解了核心数据的工作原理

我可以插入一个对象,然后使用下面的代码获得所需的结果-但是如果不先使用insert,我无法检索对象。我想存储一个“令牌”,以便应用程序记住它

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")
}

我已经打开了sqlite文件,之前插入的对象也存在于此。

您可以这样做来检索数据

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 retrieveSaveData(){
let请求:NSFetchRequest=TestData.fetchRequest()
做{
let data=try managedObjectcontext.fetch(请求)为[TestData]
如果让str=data.first?.name{
//您可以检索数据
打印(str)
}
}抓住{
let error=错误为N错误
打印(“\(错误)”)
}
}
用于保存和更新数据

 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)")
            }
        }
    }
func saveToDataBase(数据:[TestData]){
对于数据中的数据1{
let请求:NSFetchRequest=TestData.fetchRequest()
做{
let count=try managedObjectcontext.count(for:request)
如果计数=0{
//根据您的要求保存数据。
打印(数据1)
}否则{
//如果您想更新任何内容,请点击此处
}
}抓住{
let error=错误为N错误
打印(“\(错误)”)
}
}
}

希望它能帮助您

因为您知道要在持久性存储中搜索的实体,请确保NSFetchRequest(现在在Swift 3中是通用的)是一个令牌对象:

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

为什么您认为可以从空数据库中获取数据?此外,我还添加了更新和保存数据。
let fetchRequest = NSFetchRequest<Token>(entityName: "Token")
let entities = try moc.fetch(fetchRequest) as! Token