2013-09-27 90 views
2

我有一个NSObject类,它的名字是test.
test有3个属性。 Nameageid;
我有3个对象在测试类。 sbc
我把所有的对象与数组:NSArray *ary = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];
我想访问该数组中的属性的数据。这意味着我必须阅读,在循环中写入数组中对象的属性(for循环或while循环)。
我在互联网上发现了很多材料。我接近做的方法是:阵列上物体的属性(Objective-c)

[[ary objectAtIndex:0] setName:@"example"]; 

此方法与setter和getters一起工作。但它确实给了一个可怕的错误。有没有“工作”的方法来做到这一点?
谢谢...

+0

什么是“OBJ_C”? – 2013-09-27 18:21:51

+0

objective-c = obj -c – Zaur

+1

@userXXX现在标题更好。 (我们不理解堆栈溢出的所有上限。) – 2013-09-27 18:23:32

回答

9

让我们想象一下Person等级:

@interface Person : NSObject 

@property (nonatomic, copy) NSString *name; 
@property (nonatomic) NSInteger age; 
@property (nonatomic) long long identifier; 

+ (instancetype)personWithName:(NSString *)name age:(NSInteger)age identifier:(long long)identifier; 

@end 

@implementation Person 

+ (instancetype)personWithName:(NSString *)name age:(NSInteger)age identifier:(long long)identifier { 
    Person *person = [[self alloc] init]; 
    person.name = name; 
    person.age = age; 
    person.identifier = identifier; 

    return person; 
} 

@end 

然后,您可以创建的人,像这样的数组:

NSArray *people = @[[Person personWithName:@"Rob" age:32 identifier:2452323], 
        [Person personWithName:@"Rachel" age:29 identifier:84583435], 
        [Person personWithName:@"Charlie" age:4 identifier:389433]]; 

然后,您可以提取人的名称的数组,像这样:

NSArray *names = [people valueForKey:@"name"]; 
NSLog(@"%@", names); 

这将产生:

2013-09-27 14:57:13.791 MyApp[33198:a0b] (
    Rob, 
    Rachel, 
    Charlie 
) 

如果你想提取关于第二个Person的信息,那将是:

Person *person = people[1]; 
NSString *name = person.name; 
NSInteger age = person.age; 
long long identifier = person.identifier; 

如果你想改变第三人的年龄,这将是:

Person *person = people[2]; 
person.age = 5; 

或者,如果你想通过数组迭代提取的信息,你可以做到这一点,太:

for (Person *person in people) { 
    NSString *name = person.name; 
    NSInteger age = person.age; 
    long long identifier = person.identifier; 

    // now do whatever you want with name, age, and identifier 
} 
1

试试这个

步骤1:将它转换为适当的对象类型第一

s *myS = (s *)[array objectAtIndex:0]; 
b *myB = (b *)[array objectAtIndex:1]; 
c *myC = (c *)[array objectAtIndex:2]; 

第二步:设置/得到你想要

myS.name = @"example"; 
任何财产
+1

步骤2.5:从字词“STEP”中删除所有的帽子。第3步:删除有害的类型转换,因为'objectAtIndex:'返回'id'。第4步:对'NSArray'使用更详细的下标符号,而不是'objectAtIndex:'。 – 2013-09-27 18:35:40

+0

第5步:用冷水烧。 – Tommyixi