我们如何在不同的UIView类中访问viewcontroller类中添加的数组的值。

时间:2013-02-20 14:28:54

标签: ios arrays uiview

viewcontroller.m具有以下代码

- (void)viewDidLoad
{
[super viewDidLoad];


self.array=[[NSArray alloc]initWithObjects:@"hi",@"hello", nil];
NSLog(@"%@",self.array);

view *view1=[[view alloc]init];
[view1 addSubview:self.view];
 view1.viewController=self;

}

还有另一个UIView类,我试图访问该数组: .h文件:

#import <UIKit/UIKit.h>
#import "ViewController.h"

@class ViewController;

@interface view : UIView{
ViewController *viewController;


}
@property (nonatomic,retain)ViewController *viewController;


@end

和.m文件:

#import "view.h"
#import "ViewController.h"

@implementation view
@synthesize viewController;

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
    NSLog(@"%@",[viewController array]);
}

return self;
}

我查看了stackoverflow的其他帖子,并且只在viewcontrollers之间提到了值的传递;或者数组在appdelegate中声明并在类中使用(我想避免使用)。

上面最后一个代码段中的NSLog给出了null;那么请你帮忙看看这个数组的值。 在此先感谢.. !!

3 个答案:

答案 0 :(得分:2)

您可以在ViewController中使用此代码

#import "view.h"

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSArray *ary = [NSArray arrayWithObjects:@"7",@"5",@"3",@"2", nil];

    view *v=[[view alloc] init];
    [v initView:ary];

}

在你的view.h文件中:

#import <UIKit/UIKit.h>

@interface view : UIView

-(void)initView:(NSArray *)ary;
@end

在你的.m文件中:

#import "view.h"
#import "ViewController.h"

@implementation view

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

    }
    return self;
}

-(void)initView:(NSArray *)ary
{
    NSLog(@"%@",ary);
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
}
*/

@end

日志值将显示:

2013-02-20 20:11:52.731 SampleProject[9414:f803] (
    7,
    5,
    3,
    2
)

答案 1 :(得分:1)

这一行

view *view1=[[view alloc]init];

在设置initWithFrame:之前调用所需的初始值设定项view1.viewController,所以正在发生的是

NSLog(@"%@",[viewController array]);

实际上是打电话

NSLog(@"%@",[null array]);

或(注意是伪代码)

NSLog(@"%@",null);

您要做的是在分配后使用view1.viewController。最佳做法是创建一个自定义构造函数,将UIViewController*作为参数并使用它。

答案 2 :(得分:0)

首先,您要在视图上调用init方法,并在initWithFrame方法中检查viewController,该方法永远不会被调用。 (但也许您使用默认框架从initWithFrame:方法中调用init。:))。
其次,您在调用init方法之后设置了viewcontroller属性,因此viewcontroller方法中的initWithFrame仍然未初始化。 第三,不是将整个viewcontroller传递给你的视图来访问数组(哪种类型违背了MVC模式),你可能只需在你的UIView子类中创建一个实例变量并只传递数组。 / p>

然后你可以按照Dilip给出的答案,最好使用setter方法设置数组。 IMO。