iphone - ios设置隐藏:NO at begin of a long method does not show on display

标签 iphone objective-c ios cocoa-touch hidden

我有一个方法,可以从 Web 服务加载数据。 在该方法的开始,我喜欢显示一个 UIActivityIndi​​cator。

但仅将隐藏更改为NO并不会重绘UIView。 因此 UIActivityIndi​​cator 在长时间加载数据后才可见,这肯定已经太晚了。

那么我怎样才能告诉 UIView 在数据加载开始之前重绘 ActivityIndi​​cator 呢?

- (IBAction)loadData{
    [activity setHidden:NO];
     // here the activtyIndicator should appear 
     ...
    loadlongdataFromNet..
    [activity setHidden:YES];
     // here the activtyIndicator should disappear 

}

最佳答案

切勿在主线程上执行网络和其他计算密集型操作!!!

它将卡住/阻止用户界面。您应该将与网络相关的长处理移至后台线程:

- (void)loadData
{
    [activity startAnimating]; // use this instead of setHidden
    [NSThread detachNewThreadSelector:@selector(reallyLoadData) toTarget:self withObject:nil];
}

- (void)reallyLoadData
{
    // network-heavy processing
    // then:
    [activity performSelectorOnMainThread:@selector(stopAnimating) withObject:nil waitUntilDone:YES];
}

关于iphone - ios设置隐藏:NO at begin of a long method does not show on display,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13124226/

相关文章:

iphone - 推送通知证书错误

objective-c - Swift nil 与 Objective-C nil 不同

ios - 从 Swift 调用 C 函数

datetime - ios 上日期时间格式的语言与语言环境

ios - 启动图像错误 - 无法将使用 adobe AIR 创建的 ios 应用程序上传到 ios 应用程序商店

iphone - iOS全局方法

iphone - 访问 OCUnit 测试目标内的 UIImage

iphone - iOS GLKit : Fading textures dynamically (OpenGL)

objective-c - 假设使用公历,为什么将 86,400(一天)的时间间隔添加到日期永远不是答案?

javascript - 带有 HTML 5 的混合 iOS 应用程序,如何为远程服务器提供凭据