ios - 数据被覆盖 : Core Data

标签 ios swift core-data swift3

我正在尝试在核心数据中保存一个带有当前日期的随机数。但是这个数字正在被覆盖。这是我的代码:

func saveRandNumbers (number : Int){

        guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
            return
        }

        let date = Date();

        let managedContext = appDelegate.persistentContainer.viewContext;

        let entity = NSEntityDescription.entity(forEntityName: "RandNumbers", in: managedContext);

        let randNumbers = NSManagedObject(entity: entity!, insertInto : managedContext);

        randNumbers.setValue(number , forKeyPath : "randNumber");
        randNumbers.setValue(date , forKeyPath : "time");

        do{
            try managedContext.save()
        }catch let error as NSError{
            print("Could not save\(error)");
        }
    }

这就是我测试演示的方式。在 viewDidLoad()

我用两个差异值调用该函数:

saveRandNumbers (number : 3)
saveRandNumbers (number : 4)

获取数据的代码:

func fetchRandNumbers (){

        guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
            return
        }

        let managedContect = appDelegate.persistentContainer.viewContext;

        let fetchRequest = NSFetchRequest<NSManagedObject>(entityName : "RandNumbers")

        do{
            RandNumbers = try managedContect.fetch(fetchRequest)
            print("Result :\(RandNumbers)")
        }catch let error as NSError{
            print("Could not fetch \(error)");
        }

    }

输出:

[<RandNumbers: 0x608000099690> (entity: RandNumbers; id: 0xd000000000040000 <x-coredata://B35EDED6-9C24-45E7-8F05-D2CB5F5FE4BA/RandNumbers/p1> ; data: <fault>), <RandNumbers: 0x60800009a400> (entity: RandNumbers; id: 0xd000000000080000 <x-coredata://B35EDED6-9C24-45E7-8F05-D2CB5F5FE4BA/RandNumbers/p2> ; data: <fault>), <RandNumbers: 0x60800009ac70> (entity: RandNumbers; id: 0xd0000000000c0000 <x-coredata://B35EDED6-9C24-45E7-8F05-D2CB5F5FE4BA/RandNumbers/p3> ; data: <fault>), <RandNumbers: 0x60800009acc0> (entity: RandNumbers; id: 0xd000000000100000 <x-coredata://B35EDED6-9C24-45E7-8F05-D2CB5F5FE4BA/RandNumbers/p4> ; data: <fault>), <RandNumbers: 0x60800009adb0> (entity: RandNumbers; id: 0xd000000000140000 <x-coredata://B35EDED6-9C24-45E7-8F05-D2CB5F5FE4BA/RandNumbers/p5> ; data: <fault>), <RandNumbers: 0x60000009d470> (entity: RandNumbers; id: 0xd000000000180000 <x-coredata://B35EDED6-9C24-45E7-8F05-D2CB5F5FE4BA/RandNumbers/p6> ; data: {
    randNumber = 4;
    time = nil;
})]

当我打印结果时,我只得到第二个值。任何帮助,将不胜感激。谢谢。

最佳答案

您已经获取了一组结果;您需要遍历此数组以访问每个单独的项目。当你打印数组时,对象是错误的;占位符对象,当您访问它时将替换为实际对象。

func fetchRandNumbers (){

    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
        return
    }

    let managedContect = appDelegate.persistentContainer.viewContext;

    let fetchRequest: NSFetchRequest<RandNumbers> = RandNumbers.fetchRequest()

    do{
        let randNumbers = try managedContect.fetch(fetchRequest)
        for randNumber in randNumbers {
            print("random number \(randNumber.number) was saved at \(randNumber.date)")
        }
    }catch let error as NSError{
        print("Could not fetch \(error)");
    }

}

关于ios - 数据被覆盖 : Core Data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44110787/

相关文章:

ios - 如何在应用关闭时用户单击通知时获取用户信息?

ios - 在 UIWebView 中全屏时如何拦截视频?

ios - iCloud 与核心数据和文件同步

ios - 在 iOS 应用程序中加载网页

ios - 有什么方法可以避免 SwiftUI GeometryReader 阻止嵌套 View 在 List 内增长?

ios - 如何将数据从 Core Data 迁移到 Ruby On Rails?

ios - 单击 UIImageView SWIFT 不工作

iPhone - NSPredicate(添加更多过滤器)

objective-c - 一种使核心数据获取性能更好的简单方法

IOS Swift 如何在 subview 之上添加元素