如何从不同的类访问数组并向其中添加更多对象?

时间:2012-12-06 08:10:28

标签: ios xcode arrays

MasterViewController.h:

#import <UIKit/UIKit.h>

@interface MasterViewController : UITableViewController

@property (nonatomic, strong) NSMutableArray *listOfBugs;

MasterViewController.m:

- (void)viewDidLoad
{
    [super viewDidLoad];
    _listOfBugs = [[NSMutableArray alloc]init];
}

...
...

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{
    ScaryBugDoc *bug = [self.bugs objectAtIndex:indexPath.row];
    [_listOfBugs addObject:bug];
}

在上面的代码中,我创建了一个包含属性对象的数组。 我想从不同的类访问数组内的对象,并将对象添加到同一个数组。我知道我可以从同一个类创建一个新的数组:

ListOfBugsViewController.m:

#import "ListOfBugsViewController.h"
#import "MasterViewController.h"
MasterViewController *myClass = [[MasterViewController alloc]init];


    NSMutableArray *array = [myClass.listOfBugs....

但显然这不是我想要的。我想访问已在数组中的对象而不是创建新数组。

编辑:为了使事情变得简单,我有一些类,只有一个数组,我正在添加对象。所有类都应该能够向其添加对象并读取以前添加的对象。 如何从未分配和初始化的类中访问同一个数组?

由于

4 个答案:

答案 0 :(得分:1)

将对象从其他类添加到数组中非常简单。

看看如何......

Base.m

...
_baseArray=[[NSMutableArray alloc]init];
[_baseArray addObject:@"Anoop"];
[_baseArray addObject:@"kumar"];
...

OtherClass.m

Base *baseObj=[Base new];
[baseObj.baseArray addObject:@"vaidya"];

编辑:

根据我们的讨论

- (void)awakeFromNib
{
    [super awakeFromNib];
    [self createObjects];

}

- (void) createObjects
{
    _listOfBugs=[[NSMutableArray alloc]init];

    [_listOfBugs addObject:@"Anoop"];

    NSLog(@"init done, %@",_listOfBugs);

}


- (id)init
{
    self = [super init];    
    if (self) {
        [self createObjects];
    }
    return self;
}

答案 1 :(得分:0)

  

但显然这不是我想要的。我想访问已经在数组中的对象,而不是创建一个新数组。

您没有创建新数组,而是创建指向现有数组的新指针。您可以通过这个新指针编辑该数组。

NSMutableArray *array = myClass.listOfBugs;
[array addObject:newBug];

但是,您不必创建新指针,可以通过属性直接访问数组:

[myClass.listOfBugs addObject:newBug];

答案 2 :(得分:0)

你的问题令人困惑。我想你想要的是从你listOfBugs的先前创建的MasterViewController实例访问ListOfBugsViewController属性。

您的ListOfBugsViewController是否被MasterViewController实例化了?如果是这样,您可以向ListOfBugsViewController添加新属性,以包含指向MasterViewController的指针(使此属性),然后将MasterViewController设置为在实例化ListOfBugsViewController之后立即指向自己。

答案 3 :(得分:0)

Objective C的好处是对象实际上是指向对象实例的指针。当你传递一个物体时,更好的是它通过引用传递(如果我错了,请纠正我)。

你可以简单地从你的其他类中调用一个方法,然后传入你的源可变数组:

// ------------------------------------------
// Your "Other Class" .h header file
// ------------------------------------------

...

@interface OtherClass
{
    ...
}

...

+(void)addNewBugToArray:(NSMutableArray *)paramSourceArray;

@end

// ------------------------------------------
// Your "Other Class" .m implementation file
// ------------------------------------------

...

// ------------------------------------------
// Note: paramSourceArray is passed 
// by reference, meaning any change to it
// will affect the source array directly
// ------------------------------------------
+(void)addNewBugToArray:(NSMutableArray *)paramSourceArray
{
    [paramSourceArray addObject:@"newBug"];
}

...

@end




// ------------------------------------------
// Your Main View Controller .m file
// ------------------------------------------

#import "OtherClass.h"

...

-(void)viewDidLoad
{
   ...

   // initialize your source array
   sourceArray = [[NSMutableArray alloc] init];

   [btnAddBug addTarget:self selector:@selector(addNewBug) forControlEvent:UIControlEventTouchUpInside];

   ...

}

-(void)addNewBug
{
    // ---------------------------------------------------------
    // calling class method from "OtherClass" to add new bug
    // to our source array directly using pass by reference
    // ---------------------------------------------------------
    [OtherClass addNewBugToArray:sourceArray];
}