swift - 将自定义对象保存为核心数据属性

标签 swift core-data

我正在尝试将自定义类保存为核心数据对象的属性。

核心数据对象:

@objc(Safer)
class Safer: NSObject
{
@NSManaged var perakimFiles: [prayer]? //This line gives me an error saying that it cannot save a type that is not Obj. C
@NSManaged var titleEnglish: String?
@NSManaged var titleHebrew: String?
@NSManaged var parshaPerakim: [Int]?
@NSManaged var saferCode: String?
var titles: [[String]]
{
    get
    {
        var ret = [[String]]()
        var i = 0
        for file in perakimFiles!
        {
            ret.append([file.title, "\(i+1)"])
            i++
        }
        return ret
    }
}

init(_ _saferCode: SefarimCodes)
{
    super.init()
    self.saferCode = _saferCode.rawValue
}

init(_perakimFiles: [prayer], _titleEnglish: String, _titleHebrew: String)
{
    super.init()
    self.perakimFiles = _perakimFiles
    self.titleEnglish = _titleEnglish
    self.titleHebrew = _titleHebrew
}
init(_perakimFiles: [prayer], _titleEnglish: String, _titleHebrew: String, _parshaPerakim: [Int])
{
    super.init()
    self.perakimFiles = _perakimFiles
    self.titleEnglish = _titleEnglish
    self.titleHebrew = _titleHebrew
    self.parshaPerakim = _parshaPerakim
    self.saferCode = setTorahSaferCode()!.rawValue
    let config = self.configFromCode()
    self.perakimFiles = config.perakimFiles
}
}

这是我试图保存在核心数据对象中的祈祷类:

class prayer
{
var url: NSURL
var title: String
var detail: String?

init(initURL: NSURL, initTitle: String)
{
    print("1")
    print("2")
    self.title = initTitle
    print("3")
    self.url = initURL
    print("4")
}

init(initURL: NSURL, initTitle: String, initDetail: String)
{
    self.url = initURL
    self.title = initTitle
    self.detail = initTitle
}
}

那么我可以对祈祷类做些什么来让它可以被核心数据对象保存呢?我还需要能够在代码的其他地方使用祈祷类的实例。

最佳答案

如前所述,让您的祈祷类成为 NSObject 的子类并符合 NSCoding,这需要两种方法:-initWithCoder:encodeWithCoder:

一旦实现了这些,您就可以使用 NSKeyedArchiver/NSKeyedUnarchiver 类方法将您的对象转换为 NSData 对象并返回,从而允许您将对象存储为支持的 NSData 类型下的 CoreData 属性。

关于swift - 将自定义对象保存为核心数据属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35068398/

相关文章:

ios - 使用 FMDB for SQLite 库如何像 Core Data 的 controllerDidChangeContent 一样自动更新 TableView

ios - NSArray作为核心数据fetchRequest中的参数

swift - 设计模式,多级 View Controller 包含的架构

core-data - 将普通的 sqlite3 数据库迁移到核心数据?

ios - 核心数据删除所有关系实体

ios - 使用 Swift 从 documentDirectory 中删除文件夹

iphone - 如何制作我正在编写的 2 个应用程序交换信息?

Swiftui TabBar : Action for tapping TabItem of currently selected Tab to reset view

swift - 从 API 使用 CURL

swift - 标准化社交媒体分享方法中的"fatal error: unexpectedly found nil while unwrapping an Optional value"