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....
但显然这不是我想要的。我想访问已在数组中的对象而不是创建新数组。
编辑:为了使事情变得简单,我有一些类,只有一个数组,我正在添加对象。所有类都应该能够向其添加对象并读取以前添加的对象。 如何从未分配和初始化的类中访问同一个数组?
由于
答案 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];
}