ios - 获取给出属性名称的属性类
<p><p><strong>我需要什么</strong></p>
<p>我有一堆从我的数据模型中生成的类,这些类继承自 NSManagedObject。对于这些类中的任何一个,我需要一种方法来获取属性名称字符串的字典作为键,并将其类型的字符串作为值,对于数组中传递的每个属性名称。
或者更好,在代码中:</p>
<pre><code>// what I have - generated code
@interface ClassA : NSManagedObject
@property (nonatomic, retain) ClassX *propX;
@property (nonatomic, retain) ClassY *propY;
@end
@implementation ClassA
@dynamic propX;
@dynamic propy;
@end
// what I need
// the method
-(NSDictionary*)dictFromPropNameToPropType:(NSArray*)props {
//dict being something like @{ @"propX" : @"ClassX", @"propY" : @"ClassY" };
return dict;
}
// call
dictFromPropNameToPropType(@[@"propX", @"propY"]);
</code></pre>
<p>字典创建的逻辑在我身上。我需要一种将属性类名称作为字符串获取的方法,并给出它的名称。</p>
<p><strong>我的尝试</strong></p>
<pre><code>// a instance method of my ClassA
SEL selector = NSSelectorFromString(propertyNameAsString); // like @"propX"
id object = ;
Class class = ;
NSString *className = NSStringFromClass(class);
</code></pre>
<p>还尝试了 <code>dictionaryWithValuesForKeys</code>,但它似乎使用相同的机制并导致相同类型的错误。</p>
<p>那里没有成功。对于作为 <code>propertyNameAsString</code> 传入的键,我得到“类不符合键值编码”错误,即使我的 ClassA 中有 <code>propX</code> 属性</p>
<p><strong>我研究过的内容</strong></p>
<p>我查看了有关 KVC 和 KVO 的 Apple 教程,以及有关运行时的教程(以了解有关 @dynamic 自动生成属性的内容)。但是我自己没有弄明白。</p>
<p><strong>编辑</strong></p>
<p>根据 Martin R 的回答,我得到了以下代码:</p>
<pre><code>NSMutableDictionary *result = ;
NSEntityDescription *selfEntity = ;
NSDictionary *relationshipsByName = selfEntity.relationshipsByName;
for (NSString *relationDescription in relationshipsByName) {
NSRelationshipDescription *relationshipDescription = relationshipsByName;
NSEntityDescription *destinationEntity = relationshipDescription.destinationEntity;
result = destinationEntity.managedObjectClassName;
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您有 <code>NSManagedObject</code> 的子类,因此您可以检查对象 <code>entity</code>,即
<code>NSEntityDescription</code>.</p>
<ul>
<li><p>从实体描述中,得到<code>propertiesByName</code>,即
以属性名称为键的字典。值是 <code>NSAttributeDescription</code>
或 <code>NSRelationshipDescription</code> 对象。</p></li>
<li><p><code>NSAttributeDescription</code>有一个方法<code>attributeValueClassName</code>,就是类
表示属性(作为字符串)。</p></li>
<li><p><code>NSRelationshipDescription</code> 有一个描述目标的方法 <code>destinationEntity</code>
实体并具有 <code>managedObjectClassName</code> 方法。</p></li>
</ul></p>
<p style="font-size: 20px;">关于ios - 获取给出属性名称的属性类,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/23565073/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/23565073/
</a>
</p>
页:
[1]