从NSMutableArray获取对象的实例变量

时间:2014-02-27 02:06:14

标签: objective-c nsmutablearray

我有一个从plist文件中获取数据的类。

@interface myClass : NSObject
{
    NSString *string;
}

@property (copy) NSString *string;

-(id)getData:(NSString *) a :(NSInteger) i;

@end

这是实施。

@implementation myClass

-(id)getData:(NSString *) a :(NSInteger) i
{
    myClass *class = [[myClass alloc]init];

    NSString *path = [[NSBundle mainBundle] pathToResource:a ofType:@"plist"];

    NSArray *myArray = [[NSArray alloc] initWithContentsOfFile:path];

    class.string = [myArray objectAtIndex:i];

    return class;
}

我的方法getData有一个字符串和一个整数参数。此方法被置于for循环内部,因此i参数将是for循环索引。下面是它的内部方法。

-(id)init
{
    self = [super init];

    if (self)
    {
        //this is a NSMutableArray that i created in the .h file this method is in
        list = [[NSMutableArray alloc]init];

        for(int i = 0; i < 5; i++)
        {        
            [list addObject:[[[myClass alloc]init] getData: @"file" :i]];
        }

        //this is a NSTextField that i create in the .h file that this init method is in
        [instructions setStringValue:[list objectAtIndex:0].string];
    }

    return self;
}

我想要做的是将指令NSTextField的字符串值设置为我存储在NSMutableArray列表中的myClass.string值。有没有办法做到这一点?

每次我尝试[instructions setStringValue:[list objectAtIndex:0].string].

当您将一个对象存储在一个列表中时,它是否不会继承该对象的实例变量,还是有另一种方法来访问它们?

1 个答案:

答案 0 :(得分:0)

这里可以注意很多事情:

  1. class是保留关键字,因此不要将其用作本地变量名称,无论它是否会影响您的程序。
  2. 你应该确保'list'是一个强大的变量。
  3. 这句话应该是

    self.list = [[NSMutableArray alloc] init];
    

    像这样使用它:它也应该使用self

    [self.instructions setStringValue:[[list objectAtIndex:0] string]];
    

    现在出现问题:说明文本字段似乎是IBOutlet,你试图在init方法中访问它始终为零。

    如果你在windowController中,那么setStringValue应该放在windowDidLoad方法中。 如果你在viewController中,那么setStringValue应该进入loadView。

    注意:请在设置文本字段值之前调用[super loadView]。 如果它是一个文件,那么最好加载一次而不是在for循环中调用它,否则你就是好的。

    希望这有帮助。