• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 获取给出属性名称的属性类

[复制链接]
菜鸟教程小白 发表于 2022-12-13 07:43:05 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我需要什么

我有一堆从我的数据模型中生成的类,这些类继承自 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*)dictFromPropNameToPropTypeNSArray*)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;
}



Best Answer-推荐答案


您有 NSManagedObject 的子类,因此您可以检查对象 entity,即 NSEntityDescription.

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

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

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

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap