【问题标题】:Need Reachability version for ARC in iOS5iOS5需要ARC的可达性版本
【发布时间】:2011-10-17 16:56:27
【问题描述】:

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

架构 armv7 的未定义符号:

“_SCNetworkReachabilityCreateWithAddress”,引用自: +[ReachabilityreachabilityWithAddress:] 在 Reachability.o

“_SCNetworkReachabilityCreateWithName”,引用自: +[ReachabilityreachabilityWithHostName:] 在 Reachability.o

“_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 可达性代码?

【问题讨论】:

  • 您可以对某些文件关闭 ARC。看这个答案stackoverflow.com/questions/6308425/…
  • 所有这些答案,如果不是全部的话,大部分都是完全有效的,但您还没有将其中一个标记为正确?

标签: wifi ios5 reachability automatic-ref-counting


【解决方案1】:

我为 ARC 和 iOS5 编写了一个干净的“插入”版本的可达性 - 你可以在这里获得它:https://github.com/tonymillion/Reachability

【讨论】:

  • 查看您的代码我看到 isReachableViaWWAN 在 iPad 上自动返回 NO。这如何与支持 3g 的 iPad 配合使用?
  • 你错了,它会在 iPad 上正确返回,因为 TARGET_OS_IPHONE 是在为 iPad 编译时定义的 - 在为 MacOS 编译时它会自动返回 NO,因为它没有 kSCNetworkReachabilityFlagsIsWWAN 标志。如果您检查 SCNetworkReachability.h,您会看到它包含在同一个 #if 语句中。
  • 我的错。我不知道 TARGET_OS_IPHONE 是在 iPad 上定义的。令人困惑的名字和所有。无论如何,它工作得很好!谢谢 =) 我猜这个定义是 iOS 之前的遗留问题。
  • 您好,您的要点是完全错误的,如果您只需要定期检查连接,您不需要通知程序代码,您可以简单地临时测试可访问性。如果您需要通知以了解网络连接状态何时发生变化(例如在 IM 客户端中),那么您将使用通知程序。记录代码以让用户知道这些块没有在主线程上调用。
  • 例如下面的代码就足够了 [[ReachabilityreachabilityWithHostname:kRPWebsite_REPSPRO] isReachable];
【解决方案2】:

您实际上并不需要 ARC 版本的可达性,只需为可达性文件禁用 ARC

在多个文件上禁用 ARC

  • 在 Xcode 中的 Target/Build Phases/Compile Sources 选择所需文件
  • 按回车
  • 键入 -fno-objc-arc
  • 按 Enter 或完成

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

【讨论】:

  • 太棒了!!!!你能帮我找出在哪里学习所有“-fno-objc-arc”这些东西吗? Apple 是否列出了所有编译器标志?我认为这是每个高级程序员都应该学习的东西!
  • @AlbertRenshaw 它一定在文档的某个地方,但是用谷歌搜索要快得多。
  • ^非常广泛的列表...但是,它没有列出您的-fno-objc-arc
  • 我刚刚在我的项目中尝试过这个 - 并没有任何区别。 “转换为 Objective-C ARC”仍然抱怨 Reachability.m 文件中的同一行。
【解决方案3】:

rearranged them for IOS 5 and arc他们正在工作测试

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

【讨论】:

  • 感谢您的评论。在添加 SystemConfiguration.framework 之前,我仍然收到那些符号引用错误。
【解决方案4】:

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

https://gist.github.com/1182373

【讨论】:

    【解决方案5】:

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

    Here is the link to the sample by Apple

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

          Tony,即使使用非 ARC 项目,您的课程也能正常工作吗? 我可以在控制台中看到很多 ok Reachability: dealloc ,我不知道这是否正常! 我用这种方法检查连接(是我唯一使用 Rechability 的地方)

          -(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; 
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-03
            • 1970-01-01
            • 1970-01-01
            • 2012-02-27
            • 2021-12-15
            • 1970-01-01
            相关资源
            最近更新 更多