Почему моя привязка NearbyMessages Objective-C к C # генерирует исключение NSInvalidArgumentException при вызове методов публикации / подписки? - PullRequest
0 голосов
/ 08 октября 2018

Я использовал Objective Sharpie для создания полуфункциональной привязки iOS C # для API ближайших сообщений Google из двоичного файла libGNSMessages.a и заголовков в cocoapod NearbyMessages.Добавив эту библиотеку связывания в проект Xamarin.iOS, я могу создавать и получать доступ к объектам GMSMessage и GMSMessageManager.Когда я пытаюсь использовать GMSMessageManager.publishWithMessage (), я получаю это исключение, хотя я использую правильный тип аргумента:

Foundation.MonoTouchException: Objective-C exception thrown.  
Name: NSInvalidArgumentException 
Reason: NSConcreteMutableAttributedString initWithString:: nil value

Вот тестовый код, который я использую из FinishedLaunchingМетод в AppDelegate.cs (я проверил, менеджер и сообщение являются допустимыми экземплярами своего типа):

  GNSMessageManager manager = new GNSMessageManager(apiKey);
  GNSMessage message = GNSMessage.MessageWithContent(NSData.FromString("Hello"));
  GNSPublication pub = manager.PublicationWithMessage(message);

Вот привязка из ApiDefinitions.cs в проекте привязки Visual Studio, на который он ссылается (комментарийсигнатура метода из исходного файла заголовка target-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' при использовании Google Nearby Messages .Однако эта ошибка предположительно исправлена, и современные CocoaPods, которые я использовал в качестве основы для привязки Sharpie, прекрасно работают, когда я создаю тестовый быстрый проект в XCode, поэтому мое связывание, вероятно, является виновником.Есть также более старая двоичная библиотека C # NearbyMessages, включенная в NearbyMonkey , которую я пытался использовать, но она терпит крах с текущими версиями iOS.

Спасибо, что нашли время, чтобы прочитать это далеко.Любая помощь или предложения, которые вы могли бы предложить, будут очень благодарны.

1 Ответ

0 голосов
/ 28 февраля 2019

Хорошо, спустя месяцы я наконец понял, что было не так.

Модуль Google Nearby был распространен с папкой ресурсов - xcassets, некоторыми материалами по локализации, все связанные с отображением - которые я не включил вмой обязательный проект.Ошибка была вызвана, когда Nearby попытался получить доступ к этим изображениям, и так далее, чтобы отобразить запрос на разрешение.Копирование этих ресурсов в мой проект Xamarin.iOS исправило ошибку.

...