iphone - 后台任务完成后如何指示主 UI 线程? (执行SelectorInBackground)
<p><p>当后台任务完成时,如何在 iPhone 应用程序 IOS 程序中获得主 UI 线程的指示? </p>
<p>背景</p>
<ul>
<li>我正在尝试根据 <a href="https://stackoverflow.com/questions/3965246/how-to-add-a-uiactivityindicator-to-a-splash-screen-in-a-iphone-application" rel="noreferrer noopener nofollow">How to add a UIActivityIndicator to a splash screen in a iphone application?</a> 的概念设置加载指示器</li>
<li>打算在 AppDelete 中使用“performSelectorInBackground”来加载模型数据</li>
<li>因此,我需要在 RootViewController 中以某种方式告知数据何时在后台完成加载,以便它可以 (a) 使用数据更新 tableview 并 (b) 删除任何事件指示器</li>
<li>我假设这里的处理方式如下:
<ul>
<li>在 App Delegate 中 didFinishLaunchingWithOptions 将模型数据加载传递到后台</li>
<li>AppDelegate 加载 RootViewController 并立即设置事件指示器</li>
<li>在后台加载数据后,它必须以某种方式向 RootViewController(?这个问题的原因)表明它已经完成</li>
<li>第二个问题可能也是当后台任务确实表明它已完成时,RootviewController 如何在尝试禁用事件指示器之前检查 UI 是否已设置(带有事件指示器等)</li>
</ul></li>
</ul></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您可以使用 <code>-performSelectorOnMainThread:withObject:waitUntilDone:</code> 从后台选择器回调到主线程,如下所示:</p>
<pre><code>- (void)loadModel
{
// Load the model in the background
Model *aModel = /* load from some source */;
;
;
}
- (void)finishedLoadingModel
{
// Notify your view controller that the model has been loaded
[ modelLoaded:];
}
</code></pre>
<p><strong>更新</strong>:更安全的方法是检查 <code>-finishedLoadingModel</code> 以确保您在主线程上运行:</p>
<pre><code>- (void)finishedLoadingModel
{
if (!) {
;
}
// Notify your view controller that the model has been loaded
[ modelLoaded:];
}
</code></pre></p>
<p style="font-size: 20px;">关于iphone - 后台任务完成后如何指示主 UI 线程? (执行SelectorInBackground),我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/8031868/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/8031868/
</a>
</p>
页:
[1]