2015-03-28 3 views
0

MyClassA наследует от NSManagedObject.Как проверить, какой класс объявляет свойство из переменной NSAttributeDescription?

MyClassB наследуется от MyClassA.

У MyClassA есть свойство, назовем его classAProp.

MyClassB обладает свойством, назовем его классомBProp.

У меня есть экземпляр MyClassB, myClassB. Я хочу, чтобы перебрать управляемые атрибуты этого экземпляра, как это:

[myClassB.entity.attributesByName enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSAttributeDescription *attribute, BOOL *stop) {}]} 

Итак, в этом блоке, для каждого атрибута (classAProp и classBProp), как я могу проверить, если MyClassA или MyClassB объявил эти свойства.

В блоке, если я смотрю на [описание атрибута] Я вижу что-то вроде:

Proxy for prop named classAProp on ed MyClassB, real (<NSAttributeDescription: 0x7fce49536be0>), name classAProp, isOptional 0, isTransient 0, entity MyClassA, renamingIdentifier classAProp, validation predicates (
), warnings (
), versionHashModifier (null) 
userInfo { 
}, attributeType 800 , attributeValueClassName NSNumber, defaultValue 1 

Внутренне кажется, что можно получить доступ к объявляющий класс, но я не могу найти способ чтобы получить доступ к нему самостоятельно.

+0

Мне удалось получить доступ к этой информации только через внутреннюю переменную '_properties' из NSEntityDescription. То есть '[entityDescriptionB valueForKeyPath: @" _ properties "]' будет содержать только одну запись - 'classBProp'. К сожалению, использование внутренних переменных стандартных фреймворков не очень хорошо для App Store, как вы знаете, конечно. – bteapot

ответ

0

Путь Я решил это создать экземпляр NSEntityDescription из MyClassA затем проверить против

[classADescription.attributesByName.allKeys containsObject:theKey]; 

Таким образом, я могу отфильтровать свойства, реализованные MyClassA, которая была цель.