ios - 如何在 5 秒后自动从一个 View Controller 转到另一个 View Controller

标签 ios objective-c

我有一个 View Controller ,我将其命名为“Home Scene”。我有另一个名为登录场景的 View Controller 。现在想要在运行我的项目 5 秒后从我的主场景推送到登录场景。我创建了一个从主场景到登录场景的手动序列,并将标识符名称指定为登录。现在,当我运行我的项目时,运行后它会从主场景推送到登录场景,5 秒后我的项目崩溃,错误如下:“'Receiver () 没有带有标识符 ''' 的 segue。请帮我解决这个问题。提前致谢。

我已经在我的 .m 文件中完成了这段代码

-(void)viewDidAppear:(BOOL)animated {

[self performSegueWithIdentifier:@"login" sender:self];
[self performSelector:@selector(performSegueWithIdentifier:sender:)
           withObject:self afterDelay:5];


}

最佳答案

使用dispatch_after()而不是 -performSelector:withObject:afterDelay:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    [self performSegueWithIdentifier:@"login" sender:self];
});

当你按照你的方式调用执行选择器时

[self performSelector:@selector(performSegueWithIdentifier:sender:)
           withObject:self afterDelay:5];

消息中只传递一个参数。

[self performSegueWithIdentifier:self sender:nil];

显然不是你想要的。


更新

dispatch_after() 是众多 Grand Central Dispatch (GCD) 之一功能。 GCD 使用 blocksqueues在不同线程和/或不同时间运行代码(调度)。 block 是一个匿名函数,它可以存储在一个变量中并作为参数传递。队列是一个受管理的线程池。在运行时,代码块被分配到队列中。在这种情况下,执行 segue 在 5 秒延迟后在主线程上调度。

int64_t fiveSeconds = 5.0 * NSEC_PER_SEC;

dispatch_time_t fiveSecondsFromNow = dispatch_time(DISPATCH_TIME_NOW, fiveSeconds); 
dispatch_queue_t onMainThread = dispatch_get_main_queue();
dispatch_block_t performSegue = ^{
    [self performSegueWithIdentifier:@"login" sender:self];
};

dispatch_after(fiveSecondsFromNow, onMainThread, performSegue);

关于ios - 如何在 5 秒后自动从一个 View Controller 转到另一个 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28694099/

相关文章:

ios - 需要在 AppDelegate 导航栏左侧设置 logo

objective-c - 错误: Implicit declaration of function

ios - 如何在 Swift 中保持 UITextView 中 HTML 内容的缩进?

ios - 即使应用程序正在播放音乐,应用程序也会从后台状态暂停

ios - 是否可以在 JSON 数据中搜索特定键?

objective-c - Uncrustify:删除 ObjC 代码中的双及更多空行

objective-c - 请求完成时向另一个 View Controller 发送通知

ios - 如何通过编码管理 .storyboard 或 .xib 文件中的多个 View ?

ios - 如何复制项目并正确更改名称?

ios - 自定义字体在 swift 3 中变为 nil 值