Are your CBLNestedModel subclasses CBLNestedModel to any protocols? I used to see a similar problem with the object I had, and I could not understand why hash , description , superclass and debugDescription , and I finally figured it out. Here is what I had:
@interface FOOObject : NSObject<NSCopying, FOOOtherProtocol>
Looks great, it was a direct subclass of NSObject . In fact, I had other objects to test: one with properties and one without.
@interface FOOObjectWithProperties : NSObject @property NSString *someProperty; @end
and
@interface FOOObjectWithoutProperties : NSObject @end
During the FOOObjectWithProperties and FOOObjectWithoutProperties both parameters did not have the four above-mentioned NSObject properties, but the original FOOObject DID .
So what is the difference? If you look at NSCopying , it did not add any properties, so I looked at FOOOtherProtocol , some protocol that I implemented, and it did not have any declared properties.
BUT
Look at the FOOOtherProtocol ad:
@protocol FOOOtherProtocol<NSObject>
THIS IS THIS . The objective-c runtime DOES NOT include the properties of the superclass in that it returns, but will include the properties declared in protocol extensions (protocols that force other protocols to adhere).
Pay attention to hash , description , superclass and debugDescription ?
See where they are declared in the NSObject protocol declaration
Remove the forced execution of the NSObject protocol from your subclasses (since they are subclasses of NSObject anyway that already match it), and you should see that these properties go away.