有没有办法检查我的应用程序是不是调用了 iOS 8 独有的任何方法?

Posted

技术标签:

【中文标题】有没有办法检查我的应用程序是不是调用了 iOS 8 独有的任何方法?【英文标题】:Is there anyway to check if my app calls any method exclusive for iOS 8?有没有办法检查我的应用程序是否调用了 iOS 8 独有的任何方法? 【发布时间】:2015-10-23 10:53:49 【问题描述】:

ios 7 设备上测试我的应用程序后,我从 NSString 调用 containsString 时遇到崩溃,然后我意识到该方法具有 NS_AVAILABLE(10_10, 8_0);

是否有自动检查我的程序以查看是否有任何其他方法在 iOS 7 中不可用? 在这些情况下,如何以 7.0 的部署目标编译和应用程序而不说任何警告或错误?

-[__NSCFString containsString:]:无法识别的选择器发送到实例 0x1702297c0 2015-10-23 12:03:37.655 WA[1434:60b] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFString containsString:]:无法识别的选择器发送到实例 0x1702297c0” * 首先抛出调用栈: (0x183bd2f50 0x1900dc1fc 0x183bd7c04 0x183bd5930 0x183af55dc 0x1002a2c08 0x1000c71dc 0x1000caa88 0x1000c69bc 0x1000f3a4c 0x186c1055c 0x186c0ff08 0x186c099ec 0x186b9d8cc 0x186b9cad0 0x186c09044 0x1897bb504 0x1897bb030 0x183b92e90 0x183b92df0 0x183b91014 0x183ad1c20 0x186c081c8 0x186c02fdc 0x1000b6040 0x1906cfaa0) libc++abi.dylib:以 NSException 类型的未捕获异常终止

【问题讨论】:

如果您将部署目标设置为 iOS 7,那么我预计编译器会生成警告。 @***foe 感谢您的回复。我仔细检查了我收到的警告,但我没有看到任何关于 NSString 或 containsString 的信息。当我的应用启动时,它会立即崩溃。 您确定部署目标设置正确? 是的,我又检查了一遍。这就是我不明白为什么我没有收到任何警告的原因。除此之外,我的 iPhone 有 ios7 并且应用程序运行(或尝试)。 【参考方案1】:

您应该使用 rangeOfString 而不是 containsString。由于 iOS 2.0 提供 rangeOfString,因此您不会因此而崩溃。

代码sn-ps,

NSString *string = @"https://www.google.co.in/";
NSString *substring = @"http";
if ([oneContent rangeOfString:subString].location == NSNotFound) 
   NSLog(@"string does not contain substring");
 else 
   NSLog(@"string contains substring!");

否则,您可以为 NSString 添加类别类并使用 containsString: 之类的方法,您可以在其中实现上述代码。它会动态工作。

【讨论】:

是的,我知道,实际上这就是我现在正在做的事情,但问题是另一个问题。 @Ricardo 编辑了我的答案。

以上是关于有没有办法检查我的应用程序是不是调用了 iOS 8 独有的任何方法?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法检查游标是不是返回没有记录?

有没有办法在尝试调用缓存之前检查 Apollo 是不是缓存了数据?

检查用户是不是允许本地通知。 iOS 8. Obj-C

在 Cordova 中检查是不是在 iOS 或 Android 上注册了 URL 方案

有没有办法检查 Facebook 访问令牌是不是仍然有效?

iOS:有没有办法检查 NSArray 对象是不是包含某个字符?