【问题标题】:Obj C - Accessing custom class properties from and array of class objectsObj C - 从类对象和数组访问自定义类属性
【发布时间】:2015-12-17 14:22:50
【问题描述】:

我有一个自定义对象类,其中包含一些属性。

@property (nonatomic,retain) NSString *Name;
@property (nonatomic,retain) NSString *ImgURL;
@property (nonatomic,retain) NSArray  *Messages;

然后我通过一个循环并填充数据并将每个实例添加到这样的数组中

for(NSDictionary *eachEntry in details)
{
    ClientData *client;
    client.Name = [eachEntry objectForKey:@"name" ];
    client.ImgURL = [eachEntry objectForKey:@"img"];
    client.Messages = [eachEntry objectForKey:@"message" ];

    [_Data addObject:client];  
}

现在在一个表中我想在一个列表中显示其中的一些数据,我怎样才能通过名称而不是键或索引来访问每个属性。

所以目前我的 cellForRowAtIndexPath 中有这个

 NSString *name = [[self.Data objectAtIndex:indexPath.row]  objectForKey:@"name"];

显然这不起作用,因为我没有设置密钥

我不想这样做

NSString *name = [[self.Data objectAtIndex:indexPath.row]  objectAtIndex:1];

如何访问 Client.Name 等

【问题讨论】:

  • 实例名称以小写字母开头。例如:NSString *name;

标签: ios objective-c arrays nsarray


【解决方案1】:

self.Data 是一组 ClientData 对象,因此您可以这样做:

NSString *Name = ((ClientData *)[self.Data objectAtIndex:indexPath.row]).Name;

或:

ClientData *clientData = self.Data[indexPath.row];
NSString *name = clientData.Name;

【讨论】:

  • 或:NSString *name = [self.data[indexPath.row] Name];
  • 顺便说一句 - 在第二个代码示例中不需要强制转换。
【解决方案2】:

Key Value Coding (KVC)。将objectForKey 替换为valueForKey

【讨论】:

  • 嗨 Wain,这是否与 JDx 的答案相同,是否有任何理由这样做而不是 JDx 的
  • 此答案不适用于所提出的问题。
  • KVC 是一种从对象中访问指定键值的不同且通用的方法。提供的所有选项都是运行时检查,使用不同的方式使编译器对请求感到满意。它们都有相同的最终结果。
  • 属性实际名称类是否作为键,因为当我将数据添加到数组时我没有给它们任何键
  • 是的,key是用来搜索要调用的访问器方法
猜你喜欢
  • 1970-01-01
  • 2011-11-09
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
  • 2016-12-31
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
相关资源
最近更新 更多