MonoTouch "无法识别的选择器发送给instance"不能在iOS5上运行(但可以在iOS6

本文关键字:quot iOS5 不能 但可以 iOS6 instance 运行 识别 选择器 MonoTouch | 更新日期: 2023-09-27 18:11:00

我得到以下错误链接对Aviary SDK使用MonoTouch。

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

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

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

我已经把我的项目推到/分享到https://github.com/theonlylawislove/MonoTouch.Aviary,在那里你可以重现这个问题。

我的演示应用程序在iOS 6模拟器上工作,但上述错误发生在iOS 5模拟器(和设备)上。

我直接从最新的Aviary SDK 3.0中获取了所有内容(.a/bundles)。他们提供的演示应用程序(使用相同的。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绑定,我希望得到解决方案与社区分享。

MonoTouch "无法识别的选择器发送给instance"不能在iOS5上运行(但可以在iOS6

补充@Poupou的答案,在iOS 5中使用这个选择器很容易,你只需要链接到libarclite.a

这是Xamarin的一个样本。如果你愿意,你也可以从那里抓取libarclite.a

只要把libarclite.a添加到你的绑定项目,你应该很好去。

希望有帮助

亚历克斯

这个错误是正确的,因为objectAtIndexedSubscript:选择器在iOS5中不可用。参见:objectAtIndexedSubscript在IOS5中可用吗?

他们提供的演示应用程序(使用相同的。a lib)在iOS 5上运行

这并不意味着你的演示到达与原始演示相同的代码路径。你可能会执行一些原始演示的内容。

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

  • 从他们那里修复;或
  • 一些关于如何避免使用此选择器的代码路径的提示(如果他们的演示在iOS5上工作并且做你想要的,必须有一个);或
  • 旧版本仍然兼容iOS5。