例えばネットワークに接続中かどうかのフラグがあり、それが変更するたびに、インジケータをまわす、止めるを制御したいなどなど
- NetWorkManagerクラス
NetWorkManager.h
@property (nonatomic, readonly, getter=isNetworkAccessing) BOOL networkAccessing;
NetWorkManager.m
- (BOOL)isNetworkAccessing {
return [_requests count] = 0;
}
- (void) requestXXX {
NSRequest* reqeust;
// 省略
[self willChangeValueForKey:@"netWorkAccesing"];
[_requests addObject:request];
[self didChangeValueForKey:@"netWorkAccesing"];
}
- ObserverReciveSampleクラス
ObserverReciveSample.m
- (id)init{
// 省略
// キー値監視の登録
_netWorkManager = [[[NetWorkManager* alloc] init];
[netWorkManager addObserver:self forKeyPath:@"networkAccessing" options:0 context:NULL];
}
- (void)observeValueForKeyPath:(NSString*)keyPath
ofObject:(id)object
change:(NSDictionary*)change
context:(void*)context {
// networkAccessingキーの場合
if ([keyPath isEqualToString:@"networkAccessing"]) {
// ネットワークアクティビティを更新する
[UIApplication sharedApplication].networkActivityIndicatorVisible = _netWorkManager.networkAccessing;
}
}
※上記の場合だと、パラメータが存在しなくても動作します。
+ (BOOL)automaticallyNotifiesObserversForKey:(NSString*)key {
if ([key isEqualToString:@"networkAccessing"]) {
return YES;
}
return [super automaticallyNotifiesObserversForKey:key];
}
0 件のコメント:
コメントを投稿