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;那么请你帮忙看看这个数组的值。 在此先感谢.. !!
答案 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)
首先,您要在视图上调用 然后你可以按照Dilip给出的答案,最好使用setter方法设置数组。 IMO。init
方法,并在initWithFrame
方法中检查viewController,该方法永远不会被调用。 (但也许您使用默认框架从initWithFrame:
方法中调用init
。:))。
其次,您在调用init方法之后设置了viewcontroller
属性,因此viewcontroller
方法中的initWithFrame
仍然未初始化。
第三,不是将整个viewcontroller
传递给你的视图来访问数组(哪种类型违背了MVC模式),你可能只需在你的UIView子类中创建一个实例变量并只传递数组。 / p>