菜鸟教程小白 发表于 2022-12-12 18:06:30

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]
查看完整版本: iphone - 后台任务完成后如何指示主 UI 线程? (执行SelectorInBackground)