2011-03-17 71 views
1

基本上我想使用一個nib文件和視圖控制器作爲我打算創建多次視圖的模板。這個筆尖會有幾個標籤和自定義視圖。 這個想法是,我將遍歷一個對象數組,併爲每個我將創建此控制器的一個實例,並將屬性設置爲該數組中的對象的屬性。對多個視圖控制器使用相同的NIB

這一切都很好,除了一件事 - 當我呼叫setStringValue時,標籤不會更新:!!!我正在使用視圖控制器代碼中的方法來進行更改,但它不工作,我猜IBOutlet沒有被正確地連接,這很奇怪,因爲自定義視圖是完美結合。

任何想法?

回答

0

當你的Alloc你NSViewControllers,只是初始化與NIB的名字:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
1

在awakeFromNib上設置一個斷點,並在調試器中查看標籤出口的值。在awakeFromNib被調用之前,所有的插座應該已經連接。如果它仍然是零,你有你的答案。調用setStringValue:在nil上確實「沒有」。在這種情況下,您沒有正確綁定插座,或者您曾經正確綁定插座並稍後更改名稱,在這種情況下,Xcode4或界面生成器中應該有一個黃色警告三角形,指示出現問題;然而,它不會阻止你的應用程序建立或運行,插件將在創建對象後保持其初始值(這是零)。

0

感謝您的答覆,他們是有用的,但不完全是我漸漸的。 我最終通過創建一個空的NIB並用一個自定義的NSView和一些其他控件來填充它來解決它。我爲這些控件創建了一個帶IBOutlets的NSView子類,並在界面構建器中將自定義視圖的標識設置爲我的子類。 讓它工作的訣竅每個我想繪製它的時間是通過在我的子類中創建一個類方法來加載筆尖並按照我想要的方式返回視圖。下面

代碼:再次答覆

+(id)todoViewFromNibWithFrame:(NSRect)frameRect todoList:(TodoList *)aTodoList 
{ 
    NSNib *todoViewNib = [[NSNib alloc] initWithNibNamed:@"TodoView" bundle:nil]; 
    NSArray *objects = nil; 

    id todoView = nil; 

    [todoViewNib instantiateNibWithOwner:nil topLevelObjects:&objects]; 
    for (id object in objects) { 
     if ([object isKindOfClass:[self class]]) { 
      todoView = object; 
      [todoView setTodoList:aTodoList]; 
      break; 
     } 
    } 

    [todoViewNib release]; 
    return todoView; 
} 

謝謝! Steve

相關問題