如何在不同的类中访问NSMutableArray?

时间:2014-05-30 21:02:00

标签: ios objective-c nsmutablearray

我在 ViewController.h

中声明了以下内容
@property (nonatomic, strong) NSMutableArray *locations;

以及 ViewController.m

中的以下内容
@implementation GHViewController
@synthesize locations;
...
for (FSFourSquareVenueObject *object in array) {
        locations = [[NSMutableArray alloc] init];
        [locations addObject:object.locationName];
        NSLog(@"%@", locations);
    }

这会成功记录已放置在locations NSMutableArray中的所有字符串位置。如何在其他课程中访问此NSMutableArray

我试图在TableViewController类中访问它以显示数组中的所有元素。我已尝试将ViewController.h文件导入我的TableViewController.h文件,但我仍然无法从ViewController类访问该数组。

2 个答案:

答案 0 :(得分:2)

删除行

locations = [[NSMutableArray alloc] init];
从你的for循环

将其放在viewDidLoadinit之类的地方。在添加新对象之前,每次都要擦除阵列。

要跨类访问单个对象,您需要研究创建单例。网上有很多教程。

答案 1 :(得分:0)

执行@Stonz2建议,但也按如下方式修改标题:

GHViewController.h

@property (nonatomic, strong) NSArray *locations;

GHViewController.m

@implementation GHViewController
@synthesize locations;
...
NSMutableArray *array = [[NSMutableArray alloc] init];
for (FSFourSquareVenueObject *object in array) {
    [array addObject:object.locationName];
    NSLog(@"%@", array);
}
self.locations = [array copy];

然后,您可以使用GHViewController -locations从另一个类访问该数组。您可以使用以下代码段(或通过在GHViewController中创建类似的方法)编辑位置:

NSMutableArray *array = [gh_viewController.locations mutableCopy];
[array addObject: newLocation];
gh_viewController.locations = [array copy];

公开可变数组允许其他类修改数组而不通知GHViewController,反之亦然。这可能导致不可预测且难以调试的问题,例如GHViewControllerTableViewController迭代所有对象时删除某些元素。使用非可变数组可以防止出现这些类型的错误,并确保每个人都能看到内部的内容。