如何在NSArray中设置对象的属性

时间:2013-06-16 19:53:54

标签: iphone ios objective-c cocoa nsmutablearray

我编写了一个具有属性的类,我想将此类的实例添加到一个可变数组中,之后我想设置实例的num属性。但我不知道正确的语法。请告诉我正确的语法或方法。

@interface ClassA : NSObject

@property int num;

-(void) method;
+(id) getClassAObj:(int)number;

@end
--------------------------------
#import "ClassA.h"

@implementation ClassA

@synthesize num;

-(void) method{
    NSLog(@"ClassA method Called");
}
+(id) getClassAObj:(int)number {

    ClassA *obj = [[ClassA alloc] init];
    obj.num = number;
    return obj;

}

@end
-----------------------

现在主要我想手动设置num属性但我不知道什么是正确的语法

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        // insert code here...
        NSLog(@"Hello, World!");

        NSMutableArray *array = [NSMutableArray arrayWithObjects:
                                [ClassA getClassAObj:9],
                                [ClassA getClassAObj:4], nil];
        NSLog(@"%i",[[array objectAtIndex:0] num]);
        NSLog(@"%i",[array[1] num]);
        //array[1].num = 3;              <--- Help needed here
        //[[array[1]]num 3];             <--- this is also not correct syntax

        NSLog(@"%i",[array[1] num]);

    }
    return 0;
}

我不知道如果我的语法错了,或者可能无法在数组中设置对象的属性

2 个答案:

答案 0 :(得分:7)

你走了:

ClassA *anObject = array[<index>];
[anObject setNum:<yourNumber>];

您也可以使用[<array> objectAtIndex:<index>]方法,但以上是更新的方法。

祝你好运!

编辑:

如果要验证对象(因此它不会崩溃,但它也无法正常工作),您的代码可能如下所示:

id anObject = array[<index>];
if ([anObject isKindOfClass:[NSClassFromString(@"ClassA")]]) {
    [(ClassA *)anObject setNum:<number>];
}

如果要验证确切的消息(本例中为setter),则应检查对象是否响应此选择器。当您拥有不同类的对象时,这很有用,但它们都响应消息。它看起来像这样:

id anObject = array[<index>];
if ([anObject respondsToSelector:@selector(setNum:)) {
    [anObject setNum:<number>];
}

答案 1 :(得分:3)

array[1].num = 3;

这样可行,但问题是,如果将对象放入数组中,编译器将丢失有关对象的类型信息的跟踪。运行时仍然可以识别它是什么类型的对象。您只需礼貌地通知编译器。

((ClassA *)(array[1])).num = 3;