我使用 Objective Sharpie 为Google 的 Nearby Messages API从 libGNSMessages.a 二进制文件和 NearbyMessages cocoapod 中的标头生成了一个半功能的 iOS C# 绑定。将该绑定库添加到 Xamarin.iOS 项目,我可以创建和访问 GMSMessage 和 GMSMessageManager 对象。但是,当我尝试使用 GMSMessageManager.publishWithMessage() 时,我得到了这个异常,即使我使用了正确的参数类型:
Foundation.MonoTouchException: Objective-C exception thrown.
Name: NSInvalidArgumentException
Reason: NSConcreteMutableAttributedString initWithString:: nil value
这是我在 AppDelegate.cs 的 FinishedLaunching 方法中使用的测试代码(我检查过,管理器和消息都是它们类型的有效实例):
GNSMessageManager manager = new GNSMessageManager(apiKey);
GNSMessage message = GNSMessage.MessageWithContent(NSData.FromString("Hello"));
GNSPublication pub = manager.PublicationWithMessage(message);
这是它所引用的 Visual Studio 绑定项目中 ApiDefinitions.cs 的绑定(注释是原始 Objective-C 头文件中的方法签名):
// -(id<GNSPublication>)publicationWithMessage:(GNSMessage *)message;
[Export ("publicationWithMessage:")]
GNSPublication PublicationWithMessage (GNSMessage message);
这是引发异常的 GNSMessageManager.g.cs (由该 Visual Studio 项目生成)中的代码:
public virtual GNSPublication PublicationWithMessage (GNSMessage message)
{ ...
if (IsDirectBinding) {
return Runtime.GetNSObject<GNSPublication> (global::ApiDefinitions.Messaging.IntPtr_objc_msgSend_IntPtr (this.Handle, Selector.GetHandle ("publicationWithMessage:"), message.Handle));
}
... }
调试模式显示所有这三个参数至少是非空的。
这里有同样的例外:'NSConcreteMutableAttributedString initWithString:: nil value' when using Google Nearby Messages。但是,据称该错误已修复,当我在 XCode 中构建测试 swift 项目时,我用作 Sharpie 绑定基础的最新 CocoaPods 工作得很好,所以我的绑定可能是罪魁祸首。我尝试使用的NearbyMonkey中还包含一个较旧的二进制 C# NearbyMessages 库,但它在当前 iOS 版本中崩溃。
感谢您抽出宝贵时间阅读本文。您可以提供的任何帮助或建议将不胜感激。