【问题标题】:referencing an Mutable array from ClassA to Class B引用从 ClassA 到 Class B 的可变数组
【发布时间】:2011-09-06 16:07:16
【问题描述】:

有人可以帮我引用其他类的数组吗?

这里是 ClassA.h

@interface ClassA : UIViewController <MKMapViewDelegate> {

NSMutableArray *theArray;

}

@property (nonatomic, retain) NSMutableArray *theArray;

-(NSMutableArray *) pleaseReturnTheArray;

@end

ClassA.m

#import "ClassA.h"

@implementation ClassA
@synthesize theArray;

...

-(NSMutableArray *) pleaseReturnTheArray {

return theArray; 

}

这里是 ClassB.m(我想引用 ClassA 数组,我有 #import "MapView.h" 到这个类中,这是一个被推送到屏幕上的不同视图)

- (void)viewDidLoad {

[super viewDidLoad];

//first test
ClassA *firstTest = [[ClassA alloc] init];    
NSMutableArray *firstTestArray = [firstTest.theArray mutableCopy];    
NSLog(@"first test - %@", firstTestArray);

//second test
NSMutableArray *secondTestArray = [firstTest pleaseReturnTheArray];   
NSLog(@"second Test - %@", secondTestArray);

...

我得到的 NSLog 中的结果是 ...

first test - (null)
second Test - (null)

我确信我以前使用过其中一种方法并且效果很好。这与 ClassB 是标签栏控制器推送的不同视图这一事实有关吗?

任何帮助将不胜感激。

克里斯

【问题讨论】:

    标签: objective-c arrays class


    【解决方案1】:

    我最初的猜测是,您没有在 ClassA 的 init 方法中将 theArray 初始化为真正的数组。默认情况下它将为零。因此 mutableCopy 也将为零,如您的输出所示。或者也许在分配 firstTest 之后添加这行代码会有所帮助:

    firstTest.theArray = [NSArray arrayWithObjects:@"A",@"B",nil];
    

    此外,pleaseReturnTheArray 方法与 theArray getter 是多余的。您不妨改为编写以下代码行:

    NSMutableArray *secondTestArray = firstTest.theArray;
    

    请注意,因为您正在为 firstTestArray 获取可变副本,所以 firstTestArray 和 secondTestArray 将相等,但它们不会是相同的数组。这意味着如果您在 firstTestArray 中添加某些内容,它不会显示在 secondTestArray 中,反之亦然。

    【讨论】:

    • 在 classA 中,theArray 的初始化如下: theArray = [[NSMutableArray alloc] init];然后我在一个循环中添加了对象。我只想要一个指向数组的指针而不是副本,我复制只是为了看看它是否做了任何事情。
    • 如果你把 NSLog(@"firstTest.theArray = %@",firstTest.theArray);刚刚分配你的对象?
    • 这表示 init 方法中的某些内容将您的数组设置为 nil。没有更多的上下文,在这一点上很难说。也许您可以将您的 init 方法添加到上面的代码中。
    • 我已将classA中的数组更改为theArray = [NSArray arrayWithObjects:@"A",@"B",nil];
    • 我建议你从分配 firstTest 到下面的 NSLog 的那一刻起,逐行跟踪执行。应该有一点将 nil 分配给您的成员变量。
    猜你喜欢
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    相关资源
    最近更新 更多