在Objective-c中为每个项目创建具有属性的数组

3
告诉我如何创建一个数组,使每个元素都有多个属性。例如:
array:
  |
  |-item 1 ( property_1-"Name1", property_2-"LastName1", property_3-"Age1");
  |-item 2 ( property_1-"Name2", property_2-"LastName2", property_3-"Age2");
  |-item 3 ( property_1-"Name3", property_2-"LastName1", property_3-"Age2");
  |-…

在这种情况下,数组的不同元素可以具有相同的属性,就像上面发布的代码中的“item 3”具有与“item 1”中相同的“property 2”,而“property 3”与“item 2”中相同。
请告诉我如何最好地做到这一点,如果不困难,请写一个简单的示例或链接到一些教程。
提前感谢您)

属性是相同的吗?还是有一些模式?property_1具有相同前缀“Name”并且数字逐个增加的模式。但是LastName...Age...没有。那么你想要什么? - sunkehappy
@sunkehappy - 如果你关心的话,每个元素始终具有所有这些属性。 - Ilya Kharlamov
2个回答

2

我建议使用两种方法:

1. 使用类来存储所有属性

这是一个示例:

@interface Wrapper : NSObject

@property (nonatomic, assign) NSString* property_1;
@property (nonatomic, assign) NSString* property_2;
@property (nonatomic, assign) NSString* property_3;

@end

然后你可以将其用作字典:
NSString* value=[myWrapperInstance valueForKey: @"property_1"];

但是这里有一个替代方案:
1. 使用NSDictionary来存储所有的属性
NSDictionary* dict= @{ @"property_1" : @"Name1" ,@"property_2" : @"Name2",  @"property_3" : @"Name3" };

那么解决方案就很简单了:
NSMutableArray* objects=[NSMutableArray new];
for(int i=0; i<N; i++)
{
    NSDictionary* dict= @{ @"property_1" : @"Name1" ,@"property_2" : @"Name2",  @"property_3" : @"Name3" };
    [objects addObject: dict];
}

1
对于解决方案#1,+1 - 几乎总是更好使用面向对象的解决方案。稍微发表一下意见 - 我每周在SO上看到数十个问题,其中提问者正在通过复杂的方法来使用NSArray和NSDictionary来管理他的整个模型层,只有后来才会想知道为什么似乎如此困难。 - FluffulousChimp

1

看起来你想要一个包含多个NSDictionary对象的NSArray

NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys:@"Name1", @"property_1", @"LastName1", @"property_2", @"Age1", @"property_3", nil);
NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys:@"Name2", @"property_1", @"LastName2", @"property_2", @"Age2", @"property_3", nil);
NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"Name3", @"property_1", @"LastName3", @"property_2", @"Age3", @"property_3", nil);

NSArray *array = [NSArray arrayWithObjects:dict1, dict2, dict3, nil];

如果您想稍后更新此内容,则应分别使用NSMutableDictionaryNSMutableArray
如果您使用ARC,则需要在完成对象后释放它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接