【发布时间】:2013-05-24 22:56:28
【问题描述】:
创建使用以下 objC 代码的 Adobe AIR 本机扩展将在 iOS 5.1 中崩溃
NSDictionary *value=[NSDictionary dictionaryWithObjectsAndKeys: @"aSampleValue",@"aSampleKey",nil];
NSLog(@"Try objectForKeyedSubscript: %@", [value objectForKeyedSubscript:@"aSampleKey"]);
它将失败并显示“[__NSCFDictionary objectForKeyedSubscript:]: unrecognized selector”
我现在使用 Method Swizzling 将 NSDictionary objectForKeyedSubscript: 重新映射为 valueForKey: (如果它不存在),但我对这种解决方法并不满意。必须有一个 platform.xml 选项或编译器标志,不会在 iOS 5.1 中删除这些函数调用,但我找不到任何东西。我的
注意:这个问题可能看起来很像以下问题(还有一些其他问题,但我没有链接的代表),但这并不是因为原生 xCode 项目工作正常,而是使用 ADT 编译的 ANE 可以不是。
尝试过但失败了:
规格
FlashBuilder/AIR: SDK3.7 ADT 版本:3.7.0.1530
xCode 项目 BaseSDK:6.1(最新) 有效架构:armv7 armv7s 部署目标:iOS 5.1
Platform.XML (因为它还有一些其他的支持要求,所以很长)
<platform xmlns="http://ns.adobe.com/air/extension/3.7">
<linkerOptions>
<option>-ObjC</option>
<option>-weak_framework Accounts</option>
<option>-framework AddressBook</option>
<option>-framework AddressBookUI</option>
<option>-weak_framework AdSupport</option>
<option>-framework CoreLocation</option>
<option>-framework CoreMotion</option>
<option>-framework CoreTelephony</option>
<option>-framework EventKit</option>
<option>-framework EventKitUI</option>
<option>-framework iAd</option>
<option>-framework MapKit</option>
<option>-framework MediaPlayer</option>
<option>-framework MessageUI</option>
<option>-framework OpenAL</option>
<option>-weak_framework PassKit</option>
<option>-framework StoreKit</option>
<option>-weak_framework Twitter</option>
<option>-framework UIKit</option>
<option>-lsqlite3</option>
<option>-lxml2</option>
<option>-lz</option>
</linkerOptions>
</platform>
ADT 构建命令:
adt -package -target ane build/MyANEName.ane ANE/extension.xml -swc ANE/MyANEName.swc -platform iPhone-ARM -platformoptions ANE/platform.xml -C ANE/ios .
【问题讨论】:
-
我很困惑。是你写的前两行代码。如果是这样,请改用
objectForKey:。 -
我无法控制使用 objectForKeyedSubscript 的代码导致问题。不过你是对的,如果这都是我的代码,那也没什么大不了的。
标签: ios ios5 air-native-extension