Ios 如何自动实现属性和IVAR的NSCoding

Ios 如何自动实现属性和IVAR的NSCoding,ios,objective-c,iphone,xcode,nscoding,Ios,Objective C,Iphone,Xcode,Nscoding,我试图将许多对象保存到一个文件中,并检索它们以供以后使用 以前,我用过——虽然感觉很乏味 然后我发现,它以自己的方式非常棒,但它不能对实例变量进行编码/解码 我需要自动化整个编码/解码过程,因为我的应用程序仍在开发中,为每个ivar编写编码/解码实现非常繁琐。您可以从Objective-C运行时获得与类关联的ivar列表——请参阅函数。同样,您可以使用获取特定对象的ivar值,并将其设置为。这些似乎是自动编码对象IVAR所需的主要工具 您需要注意的一点是,您不希望同时保存属性的值和支持属性的iv

我试图将许多对象保存到一个文件中,并检索它们以供以后使用

以前,我用过——虽然感觉很乏味

然后我发现,它以自己的方式非常棒,但它不能对实例变量进行编码/解码


我需要自动化整个编码/解码过程,因为我的应用程序仍在开发中,为每个ivar编写编码/解码实现非常繁琐。

您可以从Objective-C运行时获得与类关联的ivar列表——请参阅函数。同样,您可以使用获取特定对象的ivar值,并将其设置为。这些似乎是自动编码对象IVAR所需的主要工具

您需要注意的一点是,您不希望同时保存属性的值和支持属性的ivar的值。因此,您可能希望将IVAR列表与属性列表进行比较,并且只对那些似乎没有相应属性的IVAR进行编码/解码


此外,不总是希望使对象的状态的每一个位都保持不变,因此你应该考虑为特定的IVAR提供一种选择方法(这可能最终会像选择中一样乏味)。此外,您可能还需要确定哪些IVAR甚至可以编码,例如通常的值类型和任何本身实现NSCoding的类型。

您可以跳过+codableProperties方法并返回IVAR的名称。这不如自动检测它们好,但比手动编写NSCoding逻辑好。

你能用属性代替IVAR吗?是的,我能,但我不能强迫我所有的队友这么做。希望你了解我的情况。这样做会使升级变得困难。如果您的类实现发生更改,您可能必须编写和维护痛苦的序列化升级方法。尽管如此,我不久前回答了一个类似的问题:@riyaz您可以尝试说服他们,或者对他们大喊大叫,或者恢复他们使用IVAR的提交。(但这并不能解决Caleb的所有问题。)谢谢你的提示:)扩展
codableProperties
并利用
class\u copyIvarList
object\u getIvar
object\u setIvar
等解决了我的问题//让对象的状态的每一个最后一点都不持久是不可取的,所以你应该考虑为特定的IVARS//I选择一种方法,我必须找到解决这个问题的方法。感谢这可能是最好的解决方案;完全自动的方法存在一些真正的陷阱。谢谢你的回答(Nick.:)