1

我正在使用 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没有改变并且NSLogself.detailLabel是(null)。如果稍后从按钮单击调用“刷新”,则单击detailLabel不为空并正确更新。如何执行此操作以确保detailLabel已创建并且不是(空)?

4

1 回答 1

0

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

调用[self updateDetails];细节视图控制器的 in viewdidLoad() 方法可以避免这个问题。

于 2013-03-12T05:02:23.740 回答