【问题标题】:AIR Native Extension failing on NSDictionary objectForKeyedSubscript in iOS 5.1iOS 5.1 中 NSDictionary objectForKeyedSubscript 上的 AIR 本机扩展失败
【发布时间】:2013-05-24 22:56:28
【问题描述】:

创建使用以下 objC 代码的 Adob​​e 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


【解决方案1】:

我遇到了同样的问题,我通过使用 ADT 的 -platformsdk 选项并将其指向 iOS 6.1 SDK 解决了这个问题

在 OSX 上,它位于此处:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk

所以将它添加到您的 ADT 命令中:

-platformsdk /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    • 2016-04-30
    • 2012-08-12
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 2014-04-03
    相关资源
    最近更新 更多