2012-06-12 47 views
0

我有一個奇怪的問題,我從來沒有遇到過, 我有我的viewController,我想在UIView中顯示的數據。傳遞數據到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); 
     [email protected]"Nouveau Document"; 
    } 
    return self; 
} 

我的vi ew很好顯示(我的意思是標籤出現),但不可能獲得本來會傳遞給它的數據...(NSLog print(null)(null))

有人知道原因嗎?

回答

0

這個問題似乎很簡單。您初始化您的視圖(這意味着您運行- (id)initWithFrame:(CGRect)frame)和您設置的數據,所以這是正常的,你看到init方法null值,因爲ivars尚未設置。你可以做的是修改你的init方法,以便在考慮這些ivars的情況下構建你的視圖。可能是這樣的:

- (id)initWithFrame:(CGRect)frame doc:(Document *)doc docInfo:(DocumentInfo *)docInfo; 

ps。如果您選擇自定義init方法,請不要忘記在任何定製之前調用指定的初始化程序(-initWithFrame:)。

+0

OMG,你是對的,但我猜,我們可以只通過價值這樣的,它只是數據集之後...我很糟糕:感謝 – Bobyblanco

+0

不客氣。但是,如果你不太在意在初始化時使用這些值,那麼對於你當前的代碼來說就沒問題,你只是無法在'init'中檢查它們。 – Alladinian

0

NSLog打印空的原因是因爲調用initWithFrame方法時doc和doc_info爲零。 doc和doc_info屬性在selectionChanged:method中調用initWithFrame方法後設置。在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]; 

}

+0

是的;)thx給你 – Bobyblanco