今天为了解决旧项目藕合度,感觉用前辈是用代理传值,感觉不太合理,因为两个对象本身一点关系都没有,就是想监听内购成功有回调而已。于是乎,就采用通知,但是在通知使用时,碰到坑,后面再细讲。
一、注册通知
//增加监听者
[[NSNotificationCenter defaultCenter] addObserver:[GDSDKAppsFlyerManager sharedStanderManager] selector:@selector(noticeFromConsoleGameIAP:) name:@"GDIAPStander" object:nil];
//监听到通知时,做相应的动作
-(void)noticeFromNetworkGameIAP:(NSNotification*)info{
}
//取消通知
-(void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"GDIAPStander" object:nil];
}
二、发送通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"GDIAPNetwork" object:nil userInfo:infoDict];
三、坑
众所周知,通知是先增加 监听者 才能进行处理通知发送的相应用事件。于是在应用启动(application didFinishLaunchingWith-Options:)时,就已经注册通知,并且已经发送通知,但是并不实现监听通知的方法(noticeFromNetworkGameIAP:),直觉告诉我,一定是线程问题,于是将注册通知 delay 0.25s,果然可以。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[[NSNotificationCenter defaultCenter] addObserver:[GDSDKAppsFlyerManager sharedStanderManager] selector:@selector(noticeFromNetworkGameIAP:) name:@"GDIAPNetwork" object:nil];//GDIAPNetwork
});
return YES;
}
网友评论