如何将数据从 iOS 中的数据模型存储到核心数据中并以数据模型的格式获取

Posted

技术标签:

【中文标题】如何将数据从 iOS 中的数据模型存储到核心数据中并以数据模型的格式获取【英文标题】:How to store data in Core data from Data model in iOS and get in the format of data model 【发布时间】:2016-11-16 11:44:29 【问题描述】:

我想在 ios 中将数据存储为数据模型。 我正在尝试这个,但它不起作用。

我的数据模型类

class FileSaveModel: NSManagedObject 
    @NSManaged var id: String
    @NSManaged var name: String
    @NSManaged var path: String
    @NSManaged var time: String
    @NSManaged var type: String
    @NSManaged var uid: String

    // TODO: - Need to get the use of this
   // lazy var uidd: NSManagedObjectID = NSManagedObjectID()

    override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?) 
        super.init(entity: entity, insertInto: context)
    

    init(name:String, path: String, contentType: ContentType, entity: NSEntityDescription, insertInto context: NSManagedObjectContext?) 
        super.init(entity: entity, insertInto: context)

        self.path = path
        self.name = name
        self.type = contentType.rawValue
        self.time = "\(NSDate())"
        self.uid = "56"
        self.id = "789"
    

这样保存

func save(name: String, path: String, type: ContentType, modelContent: ModelTest)  

        guard let entity = self.entityWith(name: entityName) else 
            return
        

当我尝试保存时,它会保存

//let modelFile = FileSaveModel(name: name, path: path, contentType: //type, entity: entity, insertInto: appDelegate.context())

但这会出现错误“无法将 NSManagedObject 转换为 FileSaveModel”

        let model = NSEntityDescription.insertNewObject(forEntityName: entityName, into: appDelegate.context()) as! FileSaveModel

        model.name = name
        model.path = path
        model.type = type.rawValue

        save(model: model, modelContent: modelContent)
    

    func save(model: FileSaveModel, modelContent: ModelTest) 

        do 
            try appDelegate.context().save()
            print("Save successful")
         catch 
            fatalError("Failure to save context: \(error)")
        
    

这样获取数据但不返回 FileSaveModel 数组只返回 NSManagedObject 数组

func fetchAllModels() 
        let fetchItems = NSFetchRequest<NSFetchRequestResult>(entityName: entityName)

        do 

            let fetchedItems = try appDelegate.context().fetch(fetchItems) as! [FileSaveModel]

            if fetchedItems.count>0 
                print(fetchedItems[0].name)
            

         catch 
            fatalError("Failed to fetch: \(error)")
        
    

【问题讨论】:

错误信息真的是Cannot cast nsobjectmodel to FileSaveModel吗?因为不存在NSObjectModel 这样的类,并且因为获取错误消息的正确文本对于解决错误至关重要。 @TomHarrington 的确切错误是“无法将 NSManagedObject 转换为 FileSaveModel”。 【参考方案1】:

如果我理解你的问题。

选择 xcdatamodeld -> 你的实体 -> 数据模块检查器 -> 模块

如果是当前产品模块,则将其更改为全局命名空间

【讨论】:

以上是关于如何将数据从 iOS 中的数据模型存储到核心数据中并以数据模型的格式获取的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中的 iOS 私有/公共数据管理和存储

iOS 核心数据映射模型

将核心数据模型从 OSX 迁移到 IOS

svn 存储库中的核心数据模型问题

如何将核心数据类添加到 iOS 中的框架

如何将现有核心数据 iOS 7 应用程序的数据迁移到 iCloud?