存档和取消存档自定义类(有一个属性作为对象数组),总是失败

Posted

技术标签:

【中文标题】存档和取消存档自定义类(有一个属性作为对象数组),总是失败【英文标题】:Archive and unarchive a custom class(have a property as object array),always failed 【发布时间】:2017-01-24 05:17:13 【问题描述】:

我在网上搜索了很长时间。但是没有用。请帮助或尝试提供一些想法如何实现这一目标。

当取消归档应用程序崩溃并且我收到此消息时:

Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 
'*** -[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class (_TtCC11ArchiveTest8dogHouse3dog) 
for key (NS.objects); the class may be defined in source code or a library that is not linked'

这是什么意思? 有人帮忙吗?在此先感谢。

现在,我认识到 Terminating 因为其他代码,例如: enter image description here

如果我尝试: enter image description here 干得好,买为什么?代码写在viewDidLoad中做别的吗?哪个方法链接了类?

我有一堂课:

let ModelPath = "Model.plist".cacheDir()

class dogHouse: NSObject , NSCoding

 var dogs:[Dog]?

required init(coder aDecoder: NSCoder)

    dogs = aDecoder.decodeObject(forKey: "dogs") as? [Dog]
    super.init()


func encode(with aCoder: NSCoder) 
    if dogs != nil
        aCoder.encode(dogs, forKey: "dogs")
    



class Dog: NSObject , NSCoding 

    var name : String?

    required init(coder aDecoder: NSCoder)
    
        name = aDecoder.decodeObject(forKey: "name") as! String?
        super.init()
    

    func encode(with aCoder: NSCoder) 
        if name != nil
            aCoder.encode(name, forKey: "name")
        

    

    //ArchiveModels
    func saveModel() -> Bool
     return NSKeyedArchiver.archiveRootObject(self, toFile: ICModelPath)
    

    //UnArchiveModels
    class func loadArchiver() -> [Dog]?
      let obj = NSKeyedUnarchiver.unarchiveObject(withFile: ICModelPath)
      if obj != nil 
         print(obj.debugDescription)
         let model = obj as? dogHouse
         return model?.dogs
      
     return nil
    


【问题讨论】:

【参考方案1】:

也许您错过了init 函数中的参数?

required init(coder aDecoder: NSCoder)

    dogs = aDecoder.decodeObject(forKey: "dogs") as? [Dog]
    super.init(aDecoder) //HERE

【讨论】:

以上是关于存档和取消存档自定义类(有一个属性作为对象数组),总是失败的主要内容,如果未能解决你的问题,请参考以下文章

WordPress 自定义帖子类型单一作为存档的父级

如何线程安全存档一组自定义对象?

Wordpress - 自定义帖子类型存档页面

使用带有多个数组的 meta_query 过滤自定义帖子类型存档页面,使用 acf 关系字段

php 如何使用自定义帖子类型存档作为首页

Drupal:将存档添加到主链接作为 SubNav