gpt4 book ai didi

iphone - objective c type cast an object based on an NSString 类名

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:24:11 24 4
gpt4 key购买 nike

我在获取类型为 id 的对象时遇到问题。我知道它的基本类型是 NSManagedObject,但它实际是什么类型(名称、电子邮件等)的自定义属性是我真正需要的。从长远来看,我正在尝试制作一种方法,将我的自定义 NSManagedObjects 转换为 NSDictionaries。也许我总的来说走错了路,但是......

如果我有类似的东西

-(void)someMethod:(id)obj{
...
Class someClass = NSClassFromString([[obj class] description]);
...

我可以从中获取类,但我无法真正弄清楚如何将我的对象转换为该类。

理想情况下,这将是该代码的下几行

someClass* myObject = (someClass*)obj;
NSArray *keys = [[[myObject entity] attributesByName] allKeys];
NSDictionary *dict = [myObject dictionaryWithValuesForKeys:keys];
//do something with dict
...

但我不知道如何获取 someClass 类型的对象。我已经看到您可以在哪里使用 NSClassFromString 对象进行 alloc init 调用,例如

id someObject = [[className alloc] init];

但这不适用于这种情况,因为我已经传递了一个我需要的对象。有什么想法/批评吗?我真的在努力避免对我的所有项目使用大量 if 语句,但这可能是目前最快的方法...

最佳答案

如果它们都是 NSManagedObject 的子类,并且您将调用它们的只是 valueForKey 或其他由 NSManagedObject 实现的方法,则只需转换为 NSManagedObject。如果我遗漏了什么,请告诉我。

在回答您对原始问题的评论时 - 您的示例中已经有这个:

NSDictionary *myObjectDictionary = [[myObject entity] attributesByName];

这为您提供了一个包含托管对象所有属性的字典,在每种情况下都以属性名称作为键。然后,您可以使用这些键在您的对象上调用 valueForKey。

也许我需要指出的一点是,如果您不打算在其上调用任何特定于子类的方法,则可以将对象转换为它的父类(super class)。

关于iphone - objective c type cast an object based on an NSString 类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7988154/

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