我试图使用apple发布的reachability-project来检测自己的例子中的可达性.我复制了最多的初始化,但是我在链接器中遇到了这个失败:
Run Code Online (Sandbox Code Playgroud)Ld build/switchViews.build/Debug-iphoneos/test.build/Objects-normal/armv6/test normal armv6 cd /Users/uid04100/Documents/TEST setenv IPHONEOS_DEPLOYMENT_TARGET 3.1.3 setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.3.sdk -L/Users/uid04100/Documents/TEST/build/Debug-iphoneos -F/Users/uid04100/Documents/TEST/build/Debug-iphoneos -filelist /Users/uid04100/Documents/TEST/build/switchViews.build/Debug-iphoneos/test.build/Objects-normal/armv6/test.LinkFileList -dead_strip -miphoneos-version-min=3.1.3 -framework Foundation -framework UIKit -framework CoreGraphics -o /Users/uid04100/Documents/TEST/build/switchViews.build/Debug-iphoneos/test.build/Objects-normal/armv6/test未定义的符号:
"_SCNetworkReachabilitySetCallback",引自: - Reachability.o中的[ - Reachability startNotifer]
"_SCNetworkReachabilityCreateWithAddress",引自:Reachability.o中的:[Reachability reachabilityScheduseWithRunLoop]
,引用自: - [Reachability startNotifer] .o
"_SCNetworkReachabilityGetFlags",引自: - Reachability.o中的[Reachability connectionRequired] - Reachability.o中的[Reachability currentReachabilityStatus]
"_SCNetworkReachabilityUnscheduleFromRunLoop",引自: - Reachability.o中的[Reachability stopNotifer]
"_SCNetworkReachabilityCreateWithName",引用自: + Reachability.o中的[Reachability reachabilityWithHostName:]
ld:找不到符号
collect2:ld返回1退出状态
我的代表团:
#import <UIKit/UIKit.h>
@class Reachability;
@interface testAppDelegate : NSObject
<UIApplicationDelegate> { UIWindow
*window; UINavigationController *navigationController;
Reachability* hostReach; …Run Code Online (Sandbox Code Playgroud) 使用设备上的仪器,它在我的应用程序中使用Apple的Reachability 2.0代码检测到3.50 KB的内存泄漏.泄漏的对象是GeneralBlock-3584.泄漏工具指向以下代码:
- (BOOL) startNotifer
{
BOOL retVal = NO;
SCNetworkReachabilityContext context = {0, self, NULL, NULL, NULL};
if(SCNetworkReachabilitySetCallback(reachabilityRef, ReachabilityCallback, &context))
{
// THIS IS LINE OF CODE WHERE THE LEAK OCCURS:
if(SCNetworkReachabilityScheduleWithRunLoop(reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode))
{
retVal = YES;
}
}
return retVal;
}
Run Code Online (Sandbox Code Playgroud)
我几乎直接使用Apple示例代码中的Reachability示例,所以我无法弄清楚为什么会发生这种情况或我如何修复它.
我的iPhone应用程序正在开发中遇到一个非常奇怪的崩溃.似乎每当我向朋友展示我的应用程序时它都会崩溃,但是否则它永远不会崩溃.在被墨菲的法律方面普遍迷惑之后,我已经确定了崩溃的模式 - 纽约市地铁.我使用地铁后,我的应用程序一直崩溃.我已将这个问题追溯到我的使用Reachability.应用程序在无网络情况(不包括飞行模式)下使用后,下次崩溃.Reachability在执行任何其他网络操作之前,我遵循Apple的指导原则并检查连接,但我发现了一些有关如何调用它的相互矛盾的文档.
目前我正在做这样的事情:
-(BOOL)reachable {
Reachability *r = [Reachability reachabilityWithHostName:@"www.stackoverflow.com"];
NetworkStatus internetStatus = [r currentReachabilityStatus];
if(internetStatus == NotReachable) {
return NO;
}
return YES;
Run Code Online (Sandbox Code Playgroud)
}
我正在调用与viewDidAppear调用的方法同步.
if ([self reachable]== YES) {
... do network stuff ...
Run Code Online (Sandbox Code Playgroud)
它基于iOS 4 Reachability Guide的代码
我的问题:是否正确使用Reachability它将处理此错误并处理缺少3G或Wifi网络?我是否需要生成另一个线程或执行某些操作来删除同步调用?
顺便说一句,这是我在应用程序崩溃时看到的崩溃日志,这让我认为这是一个同步/异步问题.
Application Specific Information: (app name) failed to resume in time Elapsed total CPU time (seconds): 3.280 (user 1.770, system 1.510), 33% CPU Elapsed application CPU time (seconds): 0.040, 0% …
我已将Reachability导入到我的应用程序中,并且我还有几个方法问题.让我先解释一下我的应用程序和其他工具.
该应用程序通过3G与同一时间,ad-hoc网络和互联网进行通信.注意:ad-hoc网络未连接到Internet.这非常有效 - 它已经实现并且测试得非常好.
话虽如此,我想实现Reachability来检测两件事.
1)用户是否连接到wifi ad-hoc网络?(如果可能的话,更好的方法是检测它是否连接到前缀为WXYZ的wifi ad-hoc网络.例如,如果列出了两个网络,一个名为Linksys,另一个名为WXYZ-Testing_Platform,它知道是否与WXYZ连接).
2)用户可以通过3G(或2G等)连接到互联网并访问我们的服务器吗?
提前致谢
编辑包括对未来寻求者的回答:
对于1),我的代码如下所示:
.h
#import <SystemConfiguration/CaptiveNetwork.h> //for checking wifi network prefix
.m
- (BOOL) connectedToWifi
{
CFArrayRef myArray = CNCopySupportedInterfaces();
// Get the dictionary containing the captive network infomation
CFDictionaryRef captiveNtwrkDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));
NSLog(@"Information of the network we're connected to: %@", captiveNtwrkDict);
NSDictionary *dict = (__bridge NSDictionary*) captiveNtwrkDict;
NSString* ssid = [dict objectForKey:@"SSID"];
if ([ssid rangeOfString:@"WXYZ"].location == NSNotFound || ssid == NULL)
{
return false;
}
else
{
return true; …Run Code Online (Sandbox Code Playgroud) 对于GPS跟踪应用程序,在打开WIFI的情况下记录位置信号会导致真正不精确的数据或带有间隙的数据.
我已经使用Reachability查询来检测在开始跟踪之前wifi是否可用.问题是,如果在进行该查询时启用了wifi但未连接到网络,则表明无法通过wifi访问互联网,但这并不表示设置应用中是否禁用了该设置.这意味着如果用户开始运行并且在中途运行连接,他们将从wifi而不是GPS或蜂窝网络获得位置信号.因此,这些数据点的准确度可能> 10米,所以我想跳过这一点.问题是,在wifi上,他们将有一个很大的空白时段,他们的信号没有被记录下来.
那么如何检查wifi是否已启用但已断开连接?
我已经阅读了我能找到的所有其他可达性讨论,但这似乎是一个差距,有很多回复错误地表明可达性解决了这个开箱即用的问题.
...而且我不会要求 wifi - 只是提醒他们启用它的事实,因此在他们的锻炼中的某些时候他们的位置数据可能会丢失(由于不准确).
随着iOS 6和iphone 5的发布,我试图找出我的应用程序如何知道手机是否处于LTE模式与GSM模式.
我还没有看到Reachability API的任何更新,它可以判断它是否连接到Wifi和WWAN,但我需要知道它是什么类型的WWAN连接.
有任何想法吗?
我正在为我的API调用构建错误案例,并希望检查互联网连接不可用时的情况.
dataTaskWithRequest似乎处理这个很好,并返回NSError代码-1009与无互联网连接的描述.我不必等待请求超时.
在什么情况下我想要使用Reachability Framework?谢谢
我已将Apple Reachability文件添加到我的项目中,我已经收到错误.我甚至没有将这些文件添加到我的任何类中,只是将它们添加到我的项目中.我怎么可能已经收到此错误?
编译时我收到以下错误:
ld: duplicate symbol _OBJC_IVAR_$_Reachability.localWiFiRef in /Users/webmaster/Dropbox/iPhone-Development/Official-Projects/PUC/build/PUC.build/Debug-iphonesimulator/PUC.build/Objects-normal/i386/Reachability-B40F6D608A62C635.o and /Users/webmaster/Dropbox/iPhone-Development/Official-Projects/PUC/build/PUC.build/Debug-iphonesimulator/PUC.build/Objects-normal/i386/Reachability-823B59DA9A9B0D23.o
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1
Run Code Online (Sandbox Code Playgroud)
注意:我正在使用Three20项目,所以我不确定它是否会以某种方式发生冲突?
我在代码中使用Reachability很困难.我想通过在启动时启动观察者然后只是接收更改通知来保持它非常简单.在以下代码中,永远不会调用reachabilityChanged方法.我尝试了很多迭代,但这是最简单的版本.它编译并运行.请帮忙...
**** AppDelegate.h代码****
#import <UIKit/UIKit.h>
#ifdef PHONEGAP_FRAMEWORK
#import <PhoneGap/PGViewController.h>
#import <PhoneGap/PGURLProtocol.h>
#import <PhoneGap/Reachability.h>
#else
#import "PGViewController.h"
#import "PGURLProtocol.h"
#import "Reachability.h"
#endif
@interface AppDelegate : NSObject < UIApplicationDelegate, UIWebViewDelegate, PGCommandDelegate> {
NSString* invokeString;
}
@property (nonatomic, copy) NSString* invokeString;
@property (nonatomic, strong) IBOutlet UIWindow* window;
@property (nonatomic, strong) IBOutlet PGViewController* viewController;
@end
Run Code Online (Sandbox Code Playgroud)
**** AppDelegate.m代码段****
#import "AppDelegate.h"
#import "MainViewController.h"
#ifdef PHONEGAP_FRAMEWORK
#import <PhoneGap/PGPlugin.h>
#import <PhoneGap/PGURLProtocol.h>
#import <PhoneGap/Reachability.h>
#else
#import "PGPlugin.h"
#import "PGURLProtocol.h" …Run Code Online (Sandbox Code Playgroud) 如果无法访问互联网,是否可以通过编程方式区分以下权限案例?
我想阅读那些无线数据权限,以区分上述情况以获得更友好的错误消息(即在一种情况下我建议验证权限,在另一种情况下我建议检查飞行模式)
基于如何在Swift中使用SCNetworkReachability,我所能找到的就是获得互联网可达性,但它不知道实际的权限:
import SystemConfiguration
@available(iOS 9.0, macOS 10.11, *)
static func internetConnectionIsReachable() -> Bool {
var zeroAddress = sockaddr_in6()
zeroAddress.sin6_len = UInt8(MemoryLayout<sockaddr_in6>.size)
zeroAddress.sin6_family = sa_family_t(AF_INET6)
guard let reachability = withUnsafePointer(to: &zeroAddress, {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
SCNetworkReachabilityCreateWithAddress(nil, $0)
}
}) else {
return false
}
var flags: SCNetworkReachabilityFlags = []
guard SCNetworkReachabilityGetFlags(reachability, &flags) else {
return false
}
return flags.contains(.reachable)
}
Run Code Online (Sandbox Code Playgroud) reachability ×10
iphone ×6
ios ×5
objective-c ×4
app-store ×1
cocoa ×1
cocoa-touch ×1
gps ×1
ios6 ×1
lte ×1
memory ×1
memory-leaks ×1
nsurlsession ×1
swift ×1
wifi ×1
xcode ×1