何时创建接口构建器IBOutlet对象

时间:2013-03-12 04:51:43

标签: objective-c interface-builder uilabel

我正在使用iPad主/详情项目模板,而我正在尝试在首次运行该应用时更新UILabels中的detailViewController

这是我的代码:

 (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未更改,NSLog表示self.detailLabel为(null)。如果稍后从按钮调用“刷新”,则单击detailLabel不为空并正确更新。我该怎么做才能确保detailLabel已经创建而不是(null)?

1 个答案:

答案 0 :(得分:0)

IBOutlet对象将在该对象的viewDidLoad()时创建(详细视图,但不是主视图)。

在详细视图控制器的viewdidLoad()方法中调用[self updateDetails];以避免此问题。