在iOS5中需要ARC的可达性版本

时间:2011-10-17 16:56:27

标签: wifi ios5 reachability automatic-ref-counting

在iOS5中使用Apple的Reachability代码我收到一堆编译错误,如下所示。关于这里发生了什么的任何想法?我正在使用ARC,因此我略微编辑了标准代码,以删除autorelease/retainNSAutoReleasePool

  

架构armv7的未定义符号:

     

“_ SCNetworkReachabilityCreateWithAddress”,引自:         + [Reachability.o

中的[Reachability reachabilityWithAddress:]      

“_ SCNetworkReachabilityCreateWithName”,引自:          + [Reachability.o

中的[Reachability reachabilityWithHostName:]      

“_ SCNetworkReachabilityUnscheduleFromRunLoop”,引自:          - Reachability.o中的[Reachability stopNotifier]

     

“_ SCNetworkReachabilityScheduleWithRunLoop”,引自:          - Reachability.o中的[Reachability startNotifier]

     

“_ SCNetworkReachabilitySetCallback”,引自:          - Reachability.o中的[Reachability startNotifier]

     

“_ SCNetworkReachabilityGetFlags”,引自:          - Reachability.o中的[Reachability connectionRequired]          - Reachability.o中的[Reachability currentReachabilityStatus]

     

ld:找不到架构armv7 clang的符号:错误:链接器   命令失败,退出代码为1(使用-v查看调用)

有没有人在iOS5下为ARC提供可行的可达性代码?

8 个答案:

答案 0 :(得分:60)

我为ARC和iOS5写了一个干净的'drop in'版本的可达性 - 你可以在这里找到它:https://github.com/tonymillion/Reachability

答案 1 :(得分:44)

您真的不需要ARC版本的可达性,只需为可达性文件禁用ARC

在MULTIPLE文件上

禁用ARC

  • 在Xcode中的目标/构建阶段/编译源中选择所需文件
  • 按ENTER
  • 输入 -fno-objc-arc
  • 按Enter 或完成

您还缺少一个框架。添加 SystemConfiguration框架

答案 2 :(得分:11)

rearranged them for IOS 5 and arc他们正在接受测试

请不要忘记在项目中添加 SystemConfiguration.framework

答案 3 :(得分:10)

我刚发现这可能有所帮助。感谢作者(这不是我的)!

https://gist.github.com/1182373

答案 4 :(得分:7)

Apple的可访问性已更新至版本3,现在支持ARC iOS5 +

Here is the link to the sample by Apple

答案 5 :(得分:3)

您需要添加systemConfiguration.framework以使Reachability工作。

答案 6 :(得分:2)

我知道这个帖子已经老了,但是如果有人感兴趣你可以通过禁用ARC for Reachability.m来解决这个问题。 Look at this post

答案 7 :(得分:1)

Tony,即使是非ARC项目,你的班级也能正常工作吗? 我可以在我的consolle中看到很多确定可达性:dealloc ,我不知道它是否正常! 我使用此方法检查连接(是我用户可更新性的唯一地方)

-(BOOL)checkConnection{
    BOOL connessione = FALSE;
    Reachability *wifiResouce       = [[Reachability reachabilityForLocalWiFi] retain];
    Reachability *phoneResouce      = [[Reachability reachabilityForInternetConnection] retain];

    NetworkStatus netStatusWiFi     = [wifiResouce currentReachabilityStatus];
    NetworkStatus netStatusPhone    = [phoneResouce currentReachabilityStatus];
    if(netStatusWiFi == NotReachable){
        if(netStatusPhone == ReachableViaWWAN){
            connessione = TRUE;
        }
    }else if(netStatusWiFi == ReachableViaWiFi){
        connessione = TRUE;
    }
    [phoneResouce release];
    [wifiResouce release];
    return connessione; 
}