オブジェクトのすべてのプロパティの変更を購読するための組み込み関数がないようです。
あなたは正確にプロパティが変更されていると、あなたのクラスを変更することができますが、他のプロパティ(+ keyPathsForValuesAffectingValueForKey
または+keyPathsForValuesAffecting<Key>
メソッドを使用して)の変化を観察することにダミーのプロパティを追加することができた気にしない場合:
// .h. We don't care about the value of this property, it will be used only for KVO forwarding
@property (nonatomic) int dummy;
#import <objc/runtime.h>
//.m
+ (NSSet*) keyPathsForValuesAffectingDummy{
NSMutableSet *result = [NSMutableSet set];
unsigned int count;
objc_property_t *props = class_copyPropertyList([self class], &count);
for (int i = 0; i < count; ++i){
const char *propName = property_getName(props[i]);
// Make sure "dummy" property does not affect itself
if (strcmp(propName, "dummy"))
[result addObject:[NSString stringWithUTF8String:propName]];
}
free(props);
return result;
}
今dummy
のプロパティを確認すると、オブジェクトのプロパティが変更されるたびにKVO通知が届きます。
また、投稿されたコードのようにオブジェクト内のすべてのプロパティのリストを取得して、それぞれのループのKVO通知を購読することができます(プロパティ値をハードコードする必要がないため)必要ならばプロパティ名を変更します。
これは間接的ですが、正しい方向に私を指摘しました。 class_copyPropertyList()とproperty_getname()は、最初に尋ねられたとおりに、すべてのプロパティに観測値を追加するのに十分です。 –
上記のコードスニペットには何か更新がありますか? – fatuhoku
プラス、これはNSManagedObjectsのために動作しますか? – fatuhoku