gpt4 book ai didi

ios - 等待 instantiateViewControllerWithIdentifier 完成

转载 作者:搜寻专家 更新时间:2023-10-30 20:15:21 24 4
gpt4 key购买 nike

我有一个 Storyboard 并从如下代码实例化一个 View Controller :

NSLog(@"1");
MyController *vc = (MyController *)[[UIStoryboard storyBoardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"MyController"];
NSLog(@"4");

MyController 类的实现包括以下内容:

- (void)viewDidLoad {
NSLog(@"2");
[super viewDidLoad];
[NSThread sleepForTimeInterval:2];
NSLog(@"3");
}

我希望在运行代码时看到以下输出:

1
2
3
4

但似乎直到我访问 MyController 的 View 时才调用 -viewDidLoad:

1
4

如果我这样修改第一个:

NSLog(@"1");
MyController *vc = (MyController *)[[UIStoryboard storyBoardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"MyController"];
[vc view]; // Just accessing
NSLog(@"4");

那么它的输出将是:

1
4
2
3

我如何确定我的属性已初始化(-viewDidLoad 已运行)并且我可以为我的 Controller 提供参数?推荐的方法是什么?

最佳答案

您应该编写您的 VC,以便在设置属性之前或之后加载 View 都没有关系。

如果你有这样的属性(property):

@property (nonatomic, copy) NSString *superAwesomeLabelText;

而你需要设置你的超赞标签的文字,有以下内容:

viewDidLoad

self.superAwesomeLabel.text = (self.superAwesomeLabelText) ?: @"Default lame text";

superAwesomeLabelText 的 setter :

- (void)setSuperAwesomeLabelText:(NSString*)superAwesomeLabelText {
_superAwesomeLabelText = [superAwesomeLabelText copy];

self.superAwesomeLabel.text = superAwesomeLabelText;
}

现在,无论是在设置属性之前还是之后加载 View 都没有关系。

关于ios - 等待 instantiateViewControllerWithIdentifier 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33620193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com