菜鸟教程小白 发表于 2022-12-13 07:43:05

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 @{ @&#34;propX&#34; : @&#34;ClassX&#34;, @&#34;propY&#34; : @&#34;ClassY&#34; };
    return dict;
}

// call
dictFromPropNameToPropType(@[@&#34;propX&#34;, @&#34;propY&#34;]);
</code></pre>

<p>字典创建的逻辑在我身上。我需要一种将属性类名称作为字符串获取的方法,并给出它的名称。</p>

<p><strong>我的尝试</strong></p>

<pre><code>// a instance method of my ClassA
SEL selector = NSSelectorFromString(propertyNameAsString); // like @&#34;propX&#34;
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]
查看完整版本: ios - 获取给出属性名称的属性类