我有一个我以前从未遇到的奇怪问题, 我在viewController中有数据要显示在UIView中。
这是一个涉及SplitView控制器的iPad应用程序,当我点击表视图(masterView)中的一个元素时,它会在我的detailViewController中执行一个函数(通过协议)。
执行一个启动UIView并向其发送数据的函数:
myController的:
- (void)SelectionChanged:(DocumentInfo*)document_info withDocu:(Document *)document{
DocumentView *viewDoc=[[DocumentView alloc]initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
viewDoc.doc=document;
viewDoc.doc_info=document_info;
[viewDoc setBackgroundColor:[UIColor whiteColor]];
[self.view addSubview:viewDoc];
}
DocumentView.h
#import <UIKit/UIKit.h>
#import "Document.h"
#import "DocumentInfo.h"
@class Document;
@class DocumentInfo;
@interface DocumentView : UIView
@property(strong,nonatomic) Document *doc;
@property(strong,nonatomic) DocumentInfo *doc_info;
@end
DocumentView.m
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
UILabel *titreDoc=[[UILabel alloc] initWithFrame:CGRectMake(20, 32, 339, 21)];
titreDoc.textColor = [self makeColorRGB_RED:66 GREEN:101 BLUE:149];
titreDoc.font = [UIFont fontWithName:@"System" size:(24.0)];
[self addSubview:titreDoc];
NSLog(@"%@ - %@",doc,doc_info);
titreDoc.text=@"Nouveau Document";
}
return self;
}
我的视图显示得很好(我的意思是标签出现)但是无法获取传递给它的数据...(NSLog print(null)(null))
有人知道原因吗?
答案 0 :(得分:0)
问题似乎很简单。您初始化视图(这意味着您运行- (id)initWithFrame:(CGRect)frame
)和后您正在设置数据,因此您在{{1}中看到null
值是正常的方法,因为还没有设置ivars。你可以做的是修改你的init方法,以构建你的视图考虑到这些ivars。也许是这样的事情:
init
PS。如果您选择制作自定义- (id)initWithFrame:(CGRect)frame doc:(Document *)doc docInfo:(DocumentInfo *)docInfo;
方法,请不要忘记在进行任何自定义之前调用指定的初始化程序(init
)。
答案 1 :(得分:0)
NSLog打印null的原因是因为调用initWithFrame方法时doc和doc_info为nil。在selectionChanged:方法中调用initWithFrame方法之后设置doc和doc_info属性。在selectionChanged方法的第3行之后添加NSLog函数,如下所示:
- (void)SelectionChanged:(DocumentInfo*)document_info withDocu:(Document *)document{
DocumentView *viewDoc=[[DocumentView alloc]initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
viewDoc.doc=document;
viewDoc.doc_info=document_info;
NSLog(@"%@ - %@",doc,doc_info);
[viewDoc setBackgroundColor:[UIColor whiteColor]];
[self.view addSubview:viewDoc];
}