3

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

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

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

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

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

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

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

4

2 回答 2

6

作为@Poupou 的回答的补充,很容易使该选择器在iOS 5 中可用,您只需要链接到libarclite.a.

这是一个使用它的 Xamarin.iOS 绑定示例,如果您愿意,也可以libarclite.a从那里获取。

只需添加libarclite.a到您的绑定项目中,您就可以开始使用了。

希望这可以帮助

亚历克斯

于 2013-04-27T19:37:58.550 回答
2

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

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

这并不意味着您的演示与原始演示的代码路径相同。您可能正在执行原始演示可以解决的问题。

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

  • 他们的修复;或者
  • 关于如何避免使用此选择器的代码路径的一些线索(如果他们的演示在 iOS5 上运行并且可以满足您的需求,则必须有一个);或者
  • 旧版本仍与 iOS5 兼容。
于 2013-04-26T19:11:33.310 回答