MonoTouch“无法识别的选择器发送到实例”不能在iOS5上运行(但在iOS6上运行)

时间:2013-04-26 18:42:56

标签: c# linker xamarin.ios aviary

我在使用MonoTouch链接Aviary SDK时出现以下错误。

  

- [__ NSArrayM objectAtIndexedSubscript:]:无法识别的选择器发送到实例0x9b0f1d0

当我尝试推送链接控制器时会出现问题。

PresentViewController(photoEditor, true, new NSAction(() => {}));

我已将项目推送/共享到https://github.com/theonlylawislove/MonoTouch.Aviary,您可以在那里重现问题。

My Demo应用程序适用于iOS 6模拟器,但上述错误发生在iOS 5模拟器(和设备)上。

我直接从最新的Aviary SDK 3.0中获取了所有内容(.a / bundles)。他们提供的演示应用程序(使用相同的.a lib)适用于iOS 5,因此问题必须出在MonoTouch和链接上。

这是我的链接标记。

[assembly: LinkWith ("libAviarySDK.a", 
                     LinkTarget = LinkTarget.ArmV7 | LinkTarget.Simulator, 
                     ForceLoad = true, 
                     IsCxx = true,
                     Frameworks="Accelerate CoreData CoreText Foundation MessageUI OpenGLES QuartzCore StoreKit SystemConfiguration UIKit", 
                     WeakFrameworks="AdSupport",
                     LinkerFlags="-ObjC -all_load -fobjc-arc -lz -lsqlite3.0")]

有什么想法吗?提前致谢!我希望解决方案能够与社区分享,因为Aviary不提供MonoTouch绑定。

2 个答案:

答案 0 :(得分:6)

补充@Poupou的回答,很容易让iOS 5中的选择器可用,只需链接libarclite.a

如果您希望从那里抓取libarclite.a,也可以使用Xamarin.iOS绑定sample

只需将libarclite.a添加到您的绑定项目中就可以了。

希望这有帮助

亚历

答案 1 :(得分:2)

在iOS5中objectAtIndexedSubscript:选择器不可用的意义上,错误正确。请参阅:Is objectAtIndexedSubscript available in IOS5?

  

他们提供的演示应用程序(使用相同的.a lib)适用于iOS 5

这并不意味着您的演示符合与原始演示相同的代码路径。你可能正在执行原始演示的工作。

如果这是来自 Aviary SDK (而不是来自您的代码),那么您需要:

  • 他们的解决方案;或
  • 关于如何避免使用此选择器的代码路径的一些线索(如果他们的演示在iOS5上工作并且做你想要的话,必须有一个);或
  • 旧版本仍与iOS5兼容。