2013-03-12 77 views
1

我正在使用iPad主/明細項目模板,並且在第一次運行應用程序時,我試圖更新detailViewController中的UILabels什麼時候創建界面生成器IBOutlet對象

這裏是我的代碼:

(void)setObject:(id)newObject 
{ 
    if (_object != newObject) { 
     [_object release]; 
     _object = [newObject retain]; 

     [self configureView]; 
    } 

    if (self.masterPopoverController != nil) { 
     [self.masterPopoverController dismissPopoverAnimated:YES]; 
    } 
} 

- (void)configureView 
{ 
    [self updateDetails]; 
} 

- (void) updateDetails 
{ 
    NSLog(@"Details = %@", self.details); 
    NSLog (@"detailLabel %@", self.detailLabel); 
    self.detailLabel.text = [self.details objectForKey:@"aKey"]; 
} 
- (IBAction)refresh:(UIBarButtonItem *)sender { 
    [self updateDetails]; 
} 

setEvent從主視圖控制器的viewDidLoad方法稱爲選擇它的tableview的第一行作爲默認值。

if (![self.tableView indexPathForSelectedRow]) 
{ 
    [self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:0]; 
    [self.detailViewController setObject:[self.sortedObjects objectAtIndex:0]]; 
} 

當我運行detailLabel不改變代碼和NSLogself.detailLabel是(空)。如果稍後從按鈕調用'刷新',則單擊detailLabel不爲空並更新正確。我怎樣才能確保detailLabel已經創建並且不是(null)?

回答

0

IBOutlet對象將在該對象的viewDidLoad()時(詳細視圖,但不是主視圖)創建。

在調用詳細視圖控制器的viewdidLoad()方法中的[self updateDetails];以避免此問題。

+0

試圖避免它,因爲它不確定當調用viewDidLoad od detail view controller時self.details是否將爲空。 self.sortedObjects從另一個線程的URL填充,setObject在完成時調用。我認爲最好的方法是從多個地方調用updateDetails並檢查self.detailLabel是否爲(null)。 – TijuanaKez 2013-03-12 06:14:34