为啥在 requestAccessToEntity:completion 中使用 performSegueWithIdentifier 时使用 dispatch_async?
Posted
技术标签:
【中文标题】为啥在 requestAccessToEntity:completion 中使用 performSegueWithIdentifier 时使用 dispatch_async?【英文标题】:Why use dispatch_async when using performSegueWithIdentifier in requestAccessToEntity:completion?为什么在 requestAccessToEntity:completion 中使用 performSegueWithIdentifier 时使用 dispatch_async? 【发布时间】:2014-03-11 02:32:43 【问题描述】:当我在完成块中调用 performSegueWithIdentifier 时,如果我不将调用包装在 dispatch_async 中,则实际上需要 10 秒才能真正发生 segue。但是,我可以在不将它们包装在同一个 dispatch_async 中的情况下做其他事情,例如做核心数据工作,或者记录“事物”...
任何关于其工作原理和原因的见解......我迷路了。如果这里不适合提出此类问题,我深表歉意。
EKEventStore *store = [[EKEventStore alloc] init];
[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error)
dispatch_async(dispatch_get_main_queue(), ^
[self performSegueWithIdentifier:self.phaseSegue sender:self];
);
];
【问题讨论】:
我遇到了一个问题,即 segue 加载在用户触摸屏幕之前不会触发,而不是延迟 10 秒,而是在请求访问的同一个完成块中,例如 question 。根据问题将其包装在 dispatch_async 中解决了这个问题,并且 segue 立即执行。 【参考方案1】:来自documentation:
当用户点击以授予或拒绝访问时,将在任意队列上调用完成处理程序。
此外,所有与 UI 相关的内容必须在主队列中完成。这就是你需要dispatch_async
的方式。
【讨论】:
以上是关于为啥在 requestAccessToEntity:completion 中使用 performSegueWithIdentifier 时使用 dispatch_async?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在参数周围使用 /*、*/ 以及为啥在提取数组长度时使用 >>>? [复制]
为啥 CoreGui Roblox 锁定在 DataModel 中,为啥受信任的用户不能使用 CoreScripts?
为啥 + 仅在客户端是 NaN?为啥不在 Node.js 中?