使用 UIMotionEffect 类在 IOS 6 中启动应用程序时崩溃

Posted

技术标签:

【中文标题】使用 UIMotionEffect 类在 IOS 6 中启动应用程序时崩溃【英文标题】:Crash on App Launch in IOS 6 with using UIMotionEffect Class 【发布时间】:2013-10-29 09:07:15 【问题描述】:

我正在使用 UIInterpolatingMotionEffect 在 ios 7 中创建自定义 AlertView。它在 iOS 7 设备上运行良好,但在 iOS 6 或更低版本的设备上崩溃并出现以下错误。

任何帮助将不胜感激。

dyld:未找到符号:_OBJC_CLASS_$_UIInterpolatingMotionEffect

引用自:/Users/kashif/Library/Application Support/iPhone Simulator/6.1/Applications/653D5FF9-1B55-4FFA-B608-4B2077CD0DFA/MyTest.app/MyTest

预计在:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/Frameworks/UIKit.framework/UIKit 在 /Users/kashif/Library/Application Support/iPhone Simulator/6.1/Applications/653D5FF9-1B55-4FFA-B608-4B2077CD0DFA/MyTest.app/MyTest

【问题讨论】:

UIMotionEffect 仅适用于 iOS7。 【参考方案1】:

UIMotionEffect 确实只在 iOS 7 中可用。要使您的应用程序在 iOS 6 下运行,请在项目文件列表中选择 UIKit.framework,然后将其链接状态(显示在右侧边栏中)从 Required 可选。但是你需要一个不同的代码路径(不使用UIMotionEffect)用于 iOS 6。

【讨论】:

这对我有用,谢谢。但是将 UIKit 设为可选有什么缺点吗? 没有理由将UIKit 设为可选。 UIKit 在 iOS 6 中可用。 错误 - 它可以防止链接器问题,就像问题中描述的那样。 UIKit 本身在 iOS 6 中可用,但不是所有类,因此需要将这些标记为可选。 不不不!馊主意!只需检查操作系统版本,Apple 的开发者视频中有一个很好的例子......你不需要为此设置 UIKit,是的,有缺点,我的很多应用程序都被拒绝了当我将 UIKit 设为可选时,在启动时崩溃。而不是让它成为可选的,包括一个 if 语句:if (NSClassFromString(UIMotionEffect)) // Allocate motion effect in here. 我从来没有遇到过让 UIKit 可选的问题。你确定你的崩溃不是因为其他东西的副作用吗?或者你还有什么可以支持你的说法(以及为什么)让 UIKit 可选是一个坏主意?【参考方案2】:

看看类中的标题行。

NS_CLASS_AVAILABLE_IOS(7_0) @interface UIMotionEffect : NSObject <NSCopying, NSCoding>

仅适用于 iOS7。

【讨论】:

我知道它在 iOS 7 中不可用,我在代码中使用它之前添加了检查 #if (defined(__IPHONE_7_0)) 但没有运气。

以上是关于使用 UIMotionEffect 类在 IOS 6 中启动应用程序时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

UIMotionEffect 同时在 UICollectionViewCell 中不起作用

一个xib,多个类在iOS中没有继承?

KeychainItemWrapper 类在 ios 9 中出现错误

a:hover伪类在ios移动端浏览器内点击无效的解决方法

PLBuildVersion 类在两个框架中都实现

PLBuildVersion 类在两个框架中都实现