将数据传递给UIView - 失败

时间:2012-06-12 09:52:55

标签: objective-c cocoa-touch uiview ios5 uiviewcontroller

我有一个我以前从未遇到的奇怪问题, 我在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))

有人知道原因吗?

2 个答案:

答案 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]; 

}