菜鸟教程小白 发表于 2022-12-13 04:43:50

ios - UITableViewCell 在位置回调后不更新,直到滚动或选择


                                            <p><p>一旦找到用户的位置并进行反向地理编码,我就会尝试更新 UITableViewCell。 </p>

<p>通过阅读许多其他类似问题的答案,似乎 tableview 重新加载必须发生在主线程上,我尝试过但没有成功。 </p>

<p>所有位置数据都被正确检索,并被正确添加到核心数据对象中,但 tableview 单元格在用户滚动或选择单元格之前不会更新,此时单元格会从该点正确更新上。 </p>

<p>这是我的代码中的一个选择 - 有谁知道为什么 tableview 单元格没有立即更新?</p>

<pre><code>- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations// Delegate callback method.
{      

    // Correctly gets currentLocation coordinates.
    ...
    CLLocation *currentLocation = ;
    ...

    // Reverse-geocode the coordinates (find physical address):
    [geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) {

      if (error == nil &amp;&amp; &gt; 0) {
            CLPlacemark *placemark = ; // Correctly gets placemark.

            //    Correctly adds placemark to core data object.
            ...
            ...

            // Reload TableView:
            //    ;//Tried this, didn&#39;t work, since not on main thread.
            //    ;//Doesn&#39;t work.
            //    ;//Doesn&#39;t work.
            ;//Doesn&#39;t work.
      }
    }];
}

- (void)refreshDisplay {
    ;
}
</code></pre>

<p>再一次,底层逻辑正在工作,因为数据被正确添加并最终显示在单元格上,但直到用户滚动或选择。我无法想象为什么这不会立即刷新 tableviewcell。有人知道吗?</p>

<p><strong>更新:我的解决方案</strong></p>

<p>缺少的部分是在单元格创建/出列之后添加 <code></code>。 detailTextLabel 现在可以正确更新。显然,这可能与一个 iOS8 错误有关,如果它开始为 nil(即没有内容),则不会更新 detailText,并且 layoutSubviews 通过初始化单元格的所有 subview (就我而言)使它不是 nil理解)。我从这里得到了这个建议:</p>

<p> <a href="https://stackoverflow.com/questions/25987135/ios-8-uitableviewcell-detail-text-not-correctly-updating/27003639#27003639" rel="noreferrer noopener nofollow">ios 8 UITableViewCell detail text not correctly updating</a> </p>

<p>接受的答案也帮助我找出了这个缺失的部分。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您应该获得对要更新的单元格的引用</p>

<p>例如。 <code>UITableViewCell *cell = ];</code></p>

<p>然后<code>[ setText:theLocation]</code>;</p>

<p>如果您更新多个单元格只是获取要更新的单元格的多个引用并相应地更新它们。</p>

<p>通常情况下,处理需要更新的 UI 组件的任何事情都应该在主线程上完成。我以前遇到过这个问题,但如果你想有一个处理线程的解决方案,你所做的似乎应该可以工作。</p>

<p>这里是 GCD 解决方案:</p>

<pre><code>dispatch_async(dispatch_get_main_queue(), ^{
    ;
});
</code></pre>

<p>但根据你所做的,它应该没有帮助......它与 GCD 基本上是一样的。希望我一开始给你的解决方案能奏效......</p>

<p><strong><em>编辑</em></strong></p>

<p>在你的 <code>- (UITableViewCell *)tableView:(UITableView *)tableView cellForNextPageAtIndexPath:(NSIndexPath *)indexPath</code></p>

<pre><code>    cell = [ initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@&#34;cell&#34;];
</code></pre>

<p>您是否将样式设置为 <code>UITableViewCellStyleDefault</code>?</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - UITableViewCell 在位置回调后不更新,直到滚动或选择,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/27866009/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/27866009/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - UITableViewCell 在位置回调后不更新,直到滚动或选择