Objective c 为什么我的警报显示两次?
在我的应用程序中,我检查与我的网站的当前连接状态以及应用程序启动时的网络状态:Objective c 为什么我的警报显示两次?,objective-c,xcode,uialertview,Objective C,Xcode,Uialertview,在我的应用程序中,我检查与我的网站的当前连接状态以及应用程序启动时的网络状态: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil]; internetReach = [[Reachability reachabilityForI
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reachabilityChanged:)
name:kReachabilityChangedNotification object:nil];
internetReach = [[Reachability reachabilityForInternetConnection] retain];
[internetReach startNotifier];
hostReach = [[Reachability reachabilityWithHostName:@"www.google.de"]
retain];
[hostReach startNotifier];
[self updateInterfaceWithReachability:internetReach];
[self updateInterfaceWithReachability:hostReach];
//....
-(void)reachabilityChanged: (NSNotification* )note{
Reachability* curReach = [note object];
NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
[self updateInterfaceWithReachability: curReach];
}
在我的updateInterfaceWithReachability
中,如果无法建立到网站的连接,我想显示一个警报
我的问题是,警报显示两次,因此第一次出现,当我解除警报时,显示秒数:
if(curReach == hostReach){
NetworkStatus netStatus = [curReach currentReachabilityStatus];
if(netStatus != NotReachable){
statusLabel.text = @"connected";
[self setStatusColorGreen];
}else{
if(![internetReach connectionRequired]){
statusLabel.text = @"not connected";
compose.enabled = NO;
[self doSMSFAlert];
[self setStatusColorRed];
}
}
}
有什么想法吗
编辑:我注意到现在我有一个工作主机,警报也会显示,但不应该显示。但是,状态为“已连接”您正在响应通知事件。事件可以在状态更改时多次发送,您可以自行决定是否已响应或正在响应类似的状态更改。有些选项存储布尔值,或者在尝试显示另一个警报视图之前检查警报视图当前是否处于打开状态。因为您正在执行两个可达性通知。你的第一个是一般的互联网。第二个是针对特定主机的。为什么不只做主机可达性呢?这样,您将只收到一个警报 在上面的代码中,我看到两个IVAR。一个是
internetReach和hostReach`。我是说你不需要两者。我删除了internetReach的东西,所以现在我得到了警报,但状态是已连接的,所以代码似乎运行了两次,第一次运行时发出未连接的警报,第二次运行时说我们已连接……奇怪。也许这是asynchrouns,第二次运行表明有响应,第一次运行是请求?我的应用程序都不需要互联网,所以我没有进行任何可达性编码。您需要搜索可达性代码并删除连接时显示的警报。实际上,我指的是[self doSMSFAlert],可达性代码本身没有警报[self doSMSFAlert]
上面的if语句正在针对InternetRach
ivar进行测试。需要更新if语句以针对hostReach
进行测试。