2

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

4 回答 4

1

以相当简单的方式将对象从其他类添加到数组中。

看看怎么...

基数

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

其他类.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;
}
于 2012-12-06T08:29:56.573 回答
0

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

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

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

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

[myClass.listOfBugs addObject:newBug];
于 2012-12-06T08:14:11.140 回答
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];
}
于 2012-12-06T08:38:30.750 回答
0

你的问题措辞令人困惑。我认为您想要的是listOfBugsMasterViewController您的ListOfBugsViewController.

ListOfBugsViewController被你的实例化了MasterViewController吗?如果是这样,您可以向您添加一个新属性以ListOfBugsViewController包含指向MasterViewController(使该属性变弱)的MasterViewController指针,然后在实例化您的ListOfBugsViewController.

于 2012-12-06T08:25:24.483 回答