[英]Why does my NearbyMessages Objective-C to C# binding throw an NSInvalidArgumentException when I call publish/subscribe methods?
我已经使用Objective Sharpie从libGNSMessages.neighborsMessages cocoapod中的二进制文件和标头为Google的 Neighbours Messages API生成了半功能iOS C#绑定。 将绑定库添加到Xamarin.iOS项目中,我可以创建和访问GMSMessage和GMSMessageManager对象。 但是,当我尝试使用GMSMessageManager.publishWithMessage()时,即使使用了正确的参数类型,也会出现此异常:
Foundation.MonoTouchException: Objective-C exception thrown.
Name: NSInvalidArgumentException
Reason: NSConcreteMutableAttributedString initWithString:: nil value
这是我在AppDelegate.cs的FinishedLaunching方法中使用的测试代码(我检查过,manager和message都是其类型的有效实例):
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));
}
... }
调试模式显示所有这三个参数至少为非空。
使用Google附近消息时,这里是相同的例外: 'NSConcreteMutableAttributedString initWithString :: nil value' 。 但是,据称该错误已修复,当我在XCode中构建测试Swift项目时,我用作Sharpie绑定基础的最新CocoaPods效果很好,因此绑定可能是罪魁祸首。 我尝试使用的NearestMonkey中还包含一个较旧的二进制C#NearestMessages库,但该库在当前的iOS版本中崩溃了。
感谢您抽出宝贵的时间阅读本文。 您所能提供的任何帮助或建议将不胜感激。
好的,几个月后,我终于弄清楚出了什么问题。
Google附近的pod分发了一个Resources文件夹-xcassets,一些本地化的东西,所有与显示相关的东西-我没有包含在绑定项目中。 当附近尝试访问这些图像等以显示权限提示时,触发了错误。 将这些资源复制到我的Xamarin.iOS项目中可修复该错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.