2016-06-29 7 views
0

Ich versuche, die Eigenschaftsliste eines RLMObject wie dies programmatisch zu erhalten:class_copyPropertyList arbeitet nicht mit RLMObject

MyRLMObject *myRLMObject = [[MyRLMObject alloc] init]; 
unsigned int count; 
objc_property_t *properties = class_copyPropertyList([myRLMObject class], &count); 

aber es gibt null zurück.

Dies funktioniert gut mit normalen Klassen abgeleitet von NSObject.

habe ich einen Haltepunkt und fand, dass myRLMObject tatsächlich als

strukturiert ist
(RLMStandalone_MyRLMObject *) 0x12c5c9cf0 
    MyRLMObject 
     RLMObject 
     _strName = (NSString *) nil 
     _strId = (NSString *) nil 

(„strName“ und „Strid“ sind die Eigenschaften I definiert und wollen aus der Liste erhalten.)

Mit eine normale Klasse von NSObject abgeleitet, bekam ich diese

(MyNSObject *) 0x12c5cab40 
    NSObject 
    _strName = (NSString *) nil 
    _strId = (NSString *) nil 

ich denke, der Grund, dass Realm sein sollte, ein „RLMStandalone_MyRLMObject“ außerhalb der Klassenstruktur und c hinzugefügt aused class_copyPropertyList funktioniert nicht.

Gibt es eine Problemumgehung für dieses Problem? Danke im Voraus.

+0

Können Sie klären, was Sie erreichen möchten? 'class_copyPropertyList' ruft nur die Eigenschaften ab, die in dieser spezifischen Klasse deklariert sind, keine Oberklassen. Wenn Sie alle deklarierten Eigenschaften kennen möchten, können Sie die Vererbungshierarchie durchlaufen. Wenn Sie aus irgendeinem Grund wissen möchten, welche Eigenschaften Realm verwaltet, können Sie '- [RLMObject objectSchema]' verwenden, um diese Informationen abzurufen, ohne die Objective-C-Laufzeit wiederherzustellen. – bdash

Antwort

1

Ich denke, Problem ist, weil RLMObject dynamische Eigenschaften haben, dh sie werden erstellt und jedes Objekt auf der Laufzeit hinzugefügt, und Sie können nicht wissen, wann es passieren wird.