gpt4 book ai didi

ios - Reachability reachable和unreachableBlock被多次调用?

转载 作者:可可西里 更新时间:2023-11-01 04:56:43 28 4
gpt4 key购买 nike

我使用 Reachability 检查我的应用程序的网络状态,除了在 iOS 9.0.1 或更高版本中 reachableBlockunreachableBlock 被调用两次外,一切正常,这给我惹了大麻烦。

这只发生在 iOS 9.0.1 和 iOS 9.1 Beta 中。

这是我的代码示例:

-(void)checkServerConnection{
//This nslog is to check the method is called only once.
NSLog(@"Check Server Connection");

Reachability* reach = [Reachability reachabilityWithHostname:@"www.google.com"];
[reach startNotifier];
reach.reachableBlock = ^(Reachability*reach)
{
//This NSLOG is called twice
NSLog(@"Reachability reachable block");
dispatch_async(dispatch_get_main_queue(), ^{
//This NSLOG is called twice
NSLog(@"REACHABLE!");
});
};

reach.unreachableBlock = ^(Reachability*reach)
{
//Same story for this one..
NSLog(@"UNREACHABLE!");
}
}

如果有人解决了这个问题,请告诉我如何解决。

最佳答案

这正是我的想法,这应该是一条评论,但它太长了。

请让我解释一下您的代码中发生了什么...
我不太确定这个,但我认为 iOS 9.0.1 和 iOS 9.1 是因为这个 [reach startNotifier];..

当您调用方法 -(void)checkServerConnection 时,您正在创建一个新的 Reachability* reach 等等。

如果您再次调用该方法,它将创建一个 Reachability* reach 并且已经存在一个..

可能的解决方案是创建一个全局变量 (Reachability* reach),每次调用该方法时都会重复使用它。


大概是这样的:

Reachability* reachVar;
// i've changed your variable name hope that's okay, just for example.

-(void)checkServerConnection{

NSLog(@"Check Server Connection");

if (reachVar == nil)
{
reachVar = [Reachability reachabilityWithHostname:@"www.google.com"];
[reachVar startNotifier];
}
reachVar.reachableBlock = ^(Reachability*reach)
{
NSLog(@"Reachability reachable block");
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"REACHABLE!");
});
};

reachVar.unreachableBlock = ^(Reachability*reach)
{
NSLog(@"UNREACHABLE!");
}
}

关于ios - Reachability reachable和unreachableBlock被多次调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32834515/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com