我使用PAPreferences来管理应用特定的偏好/默认值。它基本上是NSUserDefaults
之上的一个层,它允许我向NSUserDefaults读/写数据,就好像我只是使用普通类一样。
基本设置是子类化PAPreferences,在子类中添加@properties
' .h文件,并在.m文件中将其声明为@dynamic
。
类层次结构如下所示:
- PAPreferences
- MyPreferences // all @properties defined here, and set in -init
我的项目构建了许多不同的目标,每次添加新目标时,我都必须复制以前的MyPreferences
文件。很多代码都是重复的,每次我想改变我的应用程序的首选项时,我都必须在许多不同的文件中这样做。
我想像这样创建一个类层次结构:
- PAPreferences
- MyPreferencesBase // all @properties defined here
- MyPreferences // all @properties set in -init
使用以前的类层次结构,我的应用程序在运行MyPreferenes#init
时崩溃,我设置了第一个实例变量(无法识别的选择器发送到实例)。
如何为@properties设置为@dyanmic的超类编写子类?
答案 0 :(得分:1)
对于动态实现属性的超类,问题并不常见。它是PAPreferences
。
在-[PAPreferences init]
中,它使用运行时函数class_copyPropertyList()
检查当前类的属性。该函数被记录为仅返回在该类中声明的属性,而不是其超类。因此,PAPreferences
对超类的动态属性视而不见。
[PAPreferences init]
需要走上超类链,处理所有类的属性。当它到达时它会停止。它可能还需要调整它在+resolveInstanceMethod:
中添加方法的类。