为 OSX 重命名 Xcode 项目后出现 NSKeyedUnarchiver 错误

2023-12-01

更改项目名称后,我(我认为)命名空间出现问题。这是错误:

由于未捕获的异常“NSInvalidUnarchiveOperationException”而终止应用程序,原因:“* -[NSKeyedUnarchiverdecodeObjectForKey:]:无法解码密钥(NS.objects)类(Apple.Document)的对象;该类可以在源代码或未链接的库中定义”

有一个类似的问题已解决here,但这指的是iOS。对于 Mac,只需更改display bundle name不会更改 Dock 中图标下显示的名称。

将项目名称从“Apple”更改为“Pear”后, 我在获取时遇到问题Document来自 CoreData 的对象:

    // Document
    @objc(Document)
    class Document: NSManagedObject {
        @NSManaged var content: NSAttributedString
    }

文件content包含SpecialTextAttachments.

    // SpecialTextAttachment
    class SpecialTextAttachment: NSTextAttachment {
        //
    }

打印文档内容时,它给出了上面提到的错误。我该如何进行转换Apple.SpecialTextAttachment to Pear.SpecialTextAttachment?看来我需要在迭代数组之前对其进行转换Documents,因为仅指Document类导致崩溃。我也无法按照建议仅为此类创建另一个项目here.

    // in ViewController
    func getDocuments() {
        let fetchRequest = NSFetchRequest()
        fetchRequest.entity = NSEntityDescription.entityForName("Document", inManagedObjectContext: managedObjectContext!)
        fetchRequest.fetchBatchSize = 20
        let docs = (try? managedObjectContext!.executeFetchRequest(fetchRequest)) as! [Document]

    }

我有点放弃了,并继续坚持我的项目重命名的决定。

So in init()在我的类中,它包含处理 CoreData 数据的所有方法,我放置了以下代码:

class CoreDataHelper {
    init() {
        NSKeyedUnarchiver.setClass(SpecialTextAttachment.self, forClassName: "Apple.SpecialTextAttachment")
    }
}

这将转换任何Apple.SpecialTextAttachment to Pear.SpecialTextAttachment在任何即将进行的操作中SpecialTextAttachment可能会出现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为 OSX 重命名 Xcode 项目后出现 NSKeyedUnarchiver 错误 的相关文章

随机推荐