我用Swift编写了一个测试应用程序,我想以iOS 7为目标。
application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound
| UIUserNotificationType.Alert
| UIUserNotificationType.Badge,
categories: nil))但是这个调用在iOS 7中是不可用的,所以我添加了
var version:NSString = UIDevice.currentDevice().systemVersion as NSString;
if version.doubleValue >= 8 {
// ios 8 code
}ios 8代码块仅在iOS 8下运行(经过测试),但在运行iOS 7中的应用程序时,我仍然得到
dyld:符号未找到:从: /var/mobile/Applications/AC73969D-1A4C-45AC-99CA-0B3982C1EE36/Timely.app/Timely引用的_OBJC_CLASS_$_UIUserNotificationSettings在/var/mobile/Applications/AC73969D-1A4C-45AC-99CA-0B3982C1EE36/Timely.app/Timely中预期为: /System/Library/Frameworks/UIKit.framework/UIKit
我认为这是因为二进制文件包含iOS 7中不存在的符号to api,但是如何解决这个问题呢?
发布于 2014-06-17 15:25:11
不幸的是,我认为您遇到了当前的限制,请参见
What is the Swift preprocessor equivalent to iOS version check comparison?
解决这个问题的唯一方法是添加一个Objective文件,然后使用#if宏并创建您从Swift调用的两个助手函数(一个用于iOS8,另一个用于iOS7)。我希望这个问题会在某一时刻得到解决。
发布于 2014-08-20 02:50:39
在Beta6中,似乎有些(全部?)连接问题已经解决了。与UIAlertAction和UIAlertController相关的应用程序过去未能在7.1上发布,但现在将推出。您仍然不能在7.1中使用它们,但是您可以测试iOS版本并使用旧的对象。
发布于 2014-11-03 21:55:29
我遇到了一个类似的问题,因此对于任何有此问题的人,这里有另一个可能的解决方案:
如果您转到目标>通用>链接框架和库,您应该会看到UIKit (如果不是,添加它)。确保它旁边写着“可选”而不是“必需”.
https://stackoverflow.com/questions/24256583
复制相似问题