gpt4 book ai didi

swift - 使用 NSCoder 归档和取消归档自定义对象

转载 作者:行者123 更新时间:2023-11-30 10:16:19 27 4
gpt4 key购买 nike

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

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()
}
}

最佳答案

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

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

    NSKeyedArchiver.archiveRootObject(photo, toFile: archiveName)

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

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

    NSKeyedUnarchiver.unarchiveObjectWithFile(archiveName) as Array<Photo>

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

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

关于swift - 使用 NSCoder 归档和取消归档自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29796552/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com