使用 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 中不起作用