我知道为了显示/隐藏状态栏上的悸动,我可以使用
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
但我的程序从多个线程发送了comm请求,我需要一个位置来控制是否应该显示或隐藏throbber。
我想到了一个集中式的类,每个comm请求都会注册,这个类会知道当前一个或多个请求是否正在传输字节,并且会打开throbber,否则 - 关闭。
这是要走的路吗?为什么Apple没有在网络发生时自动出现悸动
答案 0 :(得分:7)
尝试使用以下内容:
static NSInteger __LoadingObjectsCount = 0;
@interface NSObject(LoadingObjects)
+ (void)startLoad;
+ (void)stopLoad;
+ (void)updateLoadCountWithDelta:(NSInteger)countDelta;
@end
@implementation NSObject(LoadingObjects)
+ (void)startLoad {
[self updateLoadCountWithDelta:1];
}
+ (void)stopLoad {
[self updateLoadCountWithDelta:-1];
}
+ (void)updateLoadCountWithDelta:(NSInteger)countDelta {
@synchronized(self) {
__LoadingObjectsCount += countDelta;
__LoadingObjectsCount = (__LoadingObjectsCount < 0) ? 0 : __LoadingObjectsCount ;
[UIApplication sharedApplication].networkActivityIndicatorVisible = __LoadingObjectsCount > 0;
}
}
更新:使线程安全
答案 1 :(得分:0)
在UIApplication
子类单例中使用某些逻辑似乎是处理此问题的自然方法。
//@property bool networkThingerShouldBeThrobbingOrWhatever;
// other necessary properties, like timers
- (void)someNetworkActivityHappened {
// set a timer or something
}
- (void)networkHasBeenQuietForABit
// turn off the indicator.
// UIApplcation.sharedApplication.networkActivityIndicatorVisible = NO;
}