gpt4 book ai didi

ios - 获取提供属性名称的属性类

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:43:11 26 4
gpt4 key购买 nike

我需要什么

我有一堆从我的数据模型生成的类,它们继承自 NSManagedObject。对于这些类中的任何一个,我需要一种方法来获取以属性名称字符串作为键的字典,并将其类型的字符串作为值,用于数组中传递的每个属性名称。 或者更好,在代码中:

// 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"]);

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

我尝试过的

// a instance method of my ClassA
SEL selector = NSSelectorFromString(propertyNameAsString); // like @"propX"
id object = [self performSelector:selector];
Class class = [object class];
NSString *className = NSStringFromClass(class);

也尝试过使用 dictionaryWithValuesForKeys,但它似乎使用相同的机制并导致相同类型的错误。

那里没有成功。对于作为 propertyNameAsString 传入的键,我收到“类不符合键值编码”错误,即使我的 ClassA 中有 propX 属性

我研究了什么

我看过有关 KVC 和 KVO 的 Apple 教程,还有有关运行时的教程(以了解有关 @dynamic 自动生成的属性的一些信息)。但是我自己没有弄明白。

编辑

根据 Martin R 的回答,我得到了这段代码:

NSMutableDictionary *result = [NSMutableDictionary new];
NSEntityDescription *selfEntity = [self entity];
NSDictionary *relationshipsByName = selfEntity.relationshipsByName;
for (NSString *relationDescription in relationshipsByName) {
NSRelationshipDescription *relationshipDescription = relationshipsByName[relationDescription];
NSEntityDescription *destinationEntity = relationshipDescription.destinationEntity;
result[relationDescription] = destinationEntity.managedObjectClassName;
}

最佳答案

你有 NSManagedObject 的子类,所以你可以检查对象 entity,这是NSEntityDescription

  • 从实体描述中,得到propertiesByName,即以属性名称作为键的字典。值为 NSAttributeDescriptionNSRelationshipDescription 对象。

  • NSAttributeDescription 有一个方法attributeValueClassName,就是类表示属性(作为字符串)。

  • NSRelationshipDescription 有一个描述目标的方法 destinationEntity实体并具有 managedObjectClassName 方法。

关于ios - 获取提供属性名称的属性类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23565073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com