【问题标题】:Archiving and unArchiving custom objects with NSCoder [closed]使用 NSCoder 归档和取消归档自定义对象 [关闭]
【发布时间】:2015-04-22 11:46:21
【问题描述】:

我正在尝试归档一个包含一些成员的 photo() 对象数组。鉴于 NsCoding 协议已正确实现,以下代码能否成功归档(保存)数组中的数据并再次归档?

var dir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) [0] as String
var dir2 = "/photo.plist"

//This method is suppose to archive objects if the array is not empty.

func archivePhoto ( ) {
    let archiveName =   self.dir + self.dir2
   if ( photos.count > 0 ){
        for photo in photos {
            NSKeyedArchiver.archiveRootObject(photo, toFile: archiveName)
        }
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
   // Register cell classes
    self.collectionView!.registerClass(PhotosCollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
    // Do any additional setup after loading the view.
     archivePhoto()
    let archiveName =   self.dir + self.dir2
    if let myArray =  NSKeyedUnarchiver.unarchiveObjectWithFile(archiveName) as Array<Photo>? {
         photos = myArray
         self.collectionView?.reloadData()
    }
}

【问题讨论】:

  • "下面的代码是否可以成功地归档(保存)数组中的数据并再次归档?目前它没有这样做。"如果它不这样做,那么显然不,它不会起作用。有什么问题?
  • @matt 很抱歉造成混乱,我将编辑我的问题。但是你能帮我指出我的错误吗

标签: swift nscoding nskeyedarchiver


【解决方案1】:

好吧,如果您想知道代码有什么问题,只需查看代码即可。

  • 当您存档时,您单独存档每张照片

    NSKeyedArchiver.archiveRootObject(photo, toFile: archiveName)
    

    此外,您每次通过该循环都使用相同的archiveName,那么您最终在存档中得到了什么? 一张照片。

  • 但是当您取消归档时,您显然希望收到一个 array 照片:

    NSKeyedUnarchiver.unarchiveObjectWithFile(archiveName) as Array<Photo>
    

    没有收到它,因为那不是您最初归档的内容,是吗?如果您想归档一组照片,请归档一个 array 组照片 - 而不是一遍又一遍地归档一张照片。

我并不是说解决这个问题就可以解决所有问题 - 您不会显示任何其他相关代码,例如 photos 是什么、照片是什么、它如何编码/解码自身等等,所以我没有理由相信其中任何一个都可以正常工作 - 但是您执行显示的代码显然永远不会按现状工作,因为它没有任何意义。

【讨论】:

  • 非常感谢 :-) 我的代码仍然存在一些问题,因为一旦我退出并重新启动,我的应用程序不会加载对象。谢谢我已经修复了我的存档功能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 2016-03-03
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 2021-01-15
相关资源
最近更新 更多