0

假设(为了争论)我的 iOS 项目中有一个包含一些处理的类。

我想知道是否可以在运行时向 Objective C 对象添加动态属性?

我需要动态创建一个来自 NSDictionnary 实例的对象,该对象具有非固定的键和值模式。并且要以通用方式创建对象,我需要 NSDictionnary 中的 Key 用于属性名称,而 Val 用于属性值。

-(NSMutableArray *) getFromJSON:(NSString *)json
{
JSONDecoder *decoder = [[JSONDecoder alloc] init];
NSData *jsonData = [json dataUsingEncoding:NSUTF8StringEncoding];
NSArray *array = [decoder objectWithData:jsonData];
NSMutableArray *data = [[NSMutableArray alloc] initWithArray:array];
for (int i = 0; i < [data count]; i++) {
    NSDictionary *modelData = [data objectAtIndex:i];
    // .... Object attributes creation goes here

在这一行,我需要从这个 Dic (modelData) 创建一个对象,其属性名称必须与我们 Dic 的键相对应。创建的对象(一个虚拟类)的属性将是:

@property (nonatomic, strong) key0;
@property (nonatomic, strong) key1;
@property (nonatomic, strong) key2;

.. 等等。那可能吗 ?

我正在创建一个 ModelManager 和不同的 Model 子类,这些子类继承自 ModelManager 类并具有一些特定的操作。在 ModelManager 类中,我必须执行一个通用方法来创建一个包含 NSObjects 列表的 NSMuttableArray。这些对象对应于提取的数据来自 Json 请求。每个 Json 请求都会返回特定于一个模型的数据。我正在搜索如何以通用方式执行此方法以在子类中继承它,并将动态对象转换为子类的类型。我发现的唯一通用方法是创建一个具有创建属性的虚拟类从 json 数据键,然后将此 NSObject 转换为 Model 子类。

4

1 回答 1

0

只需将其声明为属性即可。

@property (nonatomic, strong) NSDictionary * dic;

或者

@property (nonatomic, strong) NSMutableDictionary * dic;

然后在运行时按照您想要的方式创建它。

self.dic = @{randomKey : randomValue};

或者

self.dic = [@{randomKey : randomValue} mutableCopy];
于 2013-07-23T11:07:38.377 回答