AIR Native Extension在iOS 5.1中的NSDictionary objectForKeyedSubscript上失败

时间:2013-05-24 22:56:28

标签: ios ios5 air-native-extension

创建使用以下objC代码的Adobe AIR Native Extension将在iOS 5.1中崩溃

NSDictionary *value=[NSDictionary dictionaryWithObjectsAndKeys: @"aSampleValue",@"aSampleKey",nil];    
NSLog(@"Try objectForKeyedSubscript: %@", [value objectForKeyedSubscript:@"aSampleKey"]);

它将失败并带有“[__ NSCFDictionary objectForKeyedSubscript:]:无法识别的选择器”

我现在正在使用Method Swizzling重新映射NSDictionary objectForKeyedSubscript:to valueForKey :(如果它不存在)但我对这种解决方法并不满意。必须有一个platform.xml选项或编译器标志,它不会在iOS 5.1中删除这些函数调用但我找不到任何东西。我的

注意:这个问题可能看起来很像以下(和其他几个,但我没有链接的代表),但这不是因为本机xCode项目工作正常,但是使用ADT编译的ANE确实如此不

事情尝试失败了:


SPECS

FlashBuilder / AIR: SDK3.7 ADT -version: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 .

1 个答案:

答案 0 :(得分:0)

我有同样的问题,我通过使用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