当我调用发布/订阅方法时,为什么我的NearbyMessages Objective-C到C#绑定会抛出NSInvalidArgumentException?

问题描述 投票:0回答:1

我使用Objective Sharpie从libGNSMessages.a二进制文件生成Google's Nearby Messages API 的半功能iOS C#绑定,并在NearbyMessages cocoapod中生成标题。将该绑定库添加到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。然而,据称这个bug被修复了,当我在XCode中构建一个测试swift项目时,我用作Sharpie绑定工作的基础的最新CocoaPods就好了,所以我的绑定可能是罪魁祸首。还有一个较旧的二进制C#NearbyMessages库包含在NearbyMonkey中,我尝试过使用它,但它与当前的iOS版本崩溃了。

感谢您花时间阅读这篇文章。您可以提供任何帮助或建议将非常感激。

ios objective-c xamarin google-nearby objective-sharpie
1个回答
0
投票

好吧,几个月后我终于弄清楚出了什么问题。

Google Nearby pod随附一个Resources文件夹--xcassets,一些本地化的东西,都与显示相关 - 我没有包含在我的绑定项目中。当Nearby试图访问这些图像时,触发错误,等等,以显示权限提示。将这些资源复制到我的Xamarin.iOS项目修复了错误。

© www.soinside.com 2019 - 2024. All rights reserved.