2015-09-29 10 views
-1

Мы строили мессенджер, как приложение с расширением share (от сафари). Прямо сейчас мы столкнулись с большой проблемой аварии Extension, когда им пытаются получить строке адресаОшибка NSURL absoluteString в расширении расширения iOS для Xamarin

CRASH:

Протектор 1

Необработанное исключение:

0 Mono 0x01746691 mono_handle_exception_internal + 2168

1 Mono 0x01745e13 mono_handle_exception + 30

2 Моно 0x0173ed2d mono_arm_throw_exception + 104

3 com.XXX.ShareExtension 0x00268e44 throw_exception + 64

на ObjCRuntime.Runtime.throw_ns_exception (IntPtr) [0x00000] в/Пользователи/строитель/данных/дорожки/2077/d8e9592a/источник/maccore/выполнение/Delegates.generated.cs: 100 на (оберточном родной к управляемому) ObjCRuntime.Runtime.throw_ns_exception (IntPtr) < 0x00048>

6 com.XXX.ShareExtension 0x006fe5c0 xamarin_throw_ns_exception + 52

7 com.XXX.ShareExtension 0x007004b0 _ZL17exc eption_handlerP11NSException + 224

8 CoreFoundation 0x242cbba9 + 644

9 libobjc.A.dylib 0x35c7f087 + 174

10 LibC++ abi.dylib 0x35463e17 + 78

11 LibC++ abi.dylib 0x354638f7 __cxa_rethrow + 102

12 libobjc.A.dylib 0x35c7ef47 objc_exception_rethrow + 42

Это означает моно Крас ГЭС. Заглядывая я вижу:

Протектор 2

iOS_ShareExtension [336]: Неизвестное удался исключение:

Objective-C исключении брошенного. Имя: NSInvalidArgumentException Причина:

NSGetSizeAndAlignment(): кодировка без поддержки типа 'Y' at 'Y,Äû h≈Π0i≈Π√ ™ o≈Π√ª' in 'Y,Äû h≈Π0i≈Π √ ™ o≈Π√ª»

Native трассировки стека:

0 CoreFoundation 0x242cb883 + 150

1 libobjc.A.dylib 0x35c7edff objc_exception_throw + 38

2 CoreFoundation 0x242cce71 + 536

3 CoreFoundation 0x242cef69 + 60

4 CoreFoundation 0x241f9515 + 516

5 libextension.dylib 0x355c2e47 + 150

6 ком. XXX.ShareExtension 0x000643f4 wrapper_managed_to_native_ObjCRuntime_Messaging_void_objc_msgSend_IntPtr_IntPtr_IntPtr_intptr_intptr_intptr_intptr_intptr + 128

7 com.XXX.ShareExtension 0x0003a5e8 Foundation_NSItemProvider_LoadItem_string_Foundation_NSDictionary_System_Action_2_Foundation_NSObject_Foundation_NSError + 384

8 com.XXX.ShareExtension 0x0000c5d4 iOS_ShareExtension_ShareViewController_ViewDidLoad + 1048

Мой код, который выходит из строя:

NSExtensionItem content = ExtensionContext.InputItems [0]; 

    foreach (NSItemProvider item in content.Attachments) { 
     if (item.HasItemConformingTo ("public.url")){ 
      item.LoadItem (UTType.URL,null, OnItemLoaded); 
      break; 
     } 
    } 

, а затем:

NSUrl url = objectLoaded as NSUrl; 
_sharedURl = url.AbsoluteString; // THIS CRASH!!! 

Любая идея, как обойти это? Я даже пытался скрыть этот NSUrl различными способами.

+0

Что такое "objectLoaded"? Если это данные, полученные в LoadHetler completeHandler, то это не NSUrl, а данные, возвращаемые Url. Тип приведение его к URL и пытаюсь получить доступ к AbsoluteString вызовет ошибку (ваша трассировка стеки появляется, чтобы показать двоичные данные для него) – SushiHangover

+0

Да, это: частной пустоты OnItemLoaded (NSObject objectLoaded, NSError ошибка) кажется вам правы, теперь мне интересно, почему это иногда работает? – DivisionByNullPointer

ответ

0

Это может быть решены исправления: https://bugzilla.xamarin.com/show_bug.cgi?id=34518

Я бы перепроверить, что это на самом деле добраться до линии вы думаете, что вызывает проблему (с помощью Console.WriteLine, так как прикрепление отладки не работает для расширений). Если objectLoaded не был NSUrl, приведение возвращает null, и я ожидал бы исключение из нулевого указателя, а не ошибку с неясной кодировкой.

EDIT: исправленная ошибка исправления еще не прошла путь к альфа-каналу Xamarin, но проблема, по-видимому, устранена, поскольку метод обратного вызова является общедоступным. В моем случае я использовал встроенный делегат, но это всего лишь частный метод «за кулисами».