Собственная ошибка MonoTouch, вызывающая CGPDFDictionary.GetArray - PullRequest
2 голосов
/ 27 июня 2011

вот 5 строк, пытающихся получить информацию о некотором случайном PDF:

        MonoTouch.CoreGraphics.CGPDFDocument oDoc = MonoTouch.CoreGraphics.CGPDFDocument.FromUrl("http://www.attachmate.com/NR/rdonlyres/C7BBC53C-CF9B-4C9C-AC3F-6C166526EC12/0/IDC_Attachmate_NetIQOverview2007.pdf");
        MonoTouch.CoreGraphics.CGPDFPage oPage = oDoc.GetPage(1);
        MonoTouch.CoreGraphics.CGPDFDictionary oDict = oPage.Dictionary;
        MonoTouch.CoreGraphics.CGPDFArray oArray;
        bool bResult = oDict.GetArray("Annots", out oArray);

Последняя строка (oDict.GetArray ()) вылетает следующим образом:

Собственная трассировка стека:

0   Test_MT1                            0x000d1965 mono_handle_native_sigsegv + 343
1   Test_MT1                            0x0000ffb4 mono_sigsegv_signal_handler + 322
2   libSystem.B.dylib                   0x94a9705b _sigtramp + 43
3   ???                                 0xffffffff 0x0 + 4294967295
4   CoreGraphics                        0x01055068 compare_key + 34
5   libSystem.B.dylib                   0x94a5f63d bsearch + 41
6   CoreGraphics                        0x010552a1 CGPDFDictionaryGetObject + 74
7   CoreGraphics                        0x010553fa CGPDFDictionaryGetArray + 31
8   ???                                 0x0ca253f6 0x0 + 211964918

Есть подсказки?

1 Ответ

1 голос
/ 16 июля 2011

Это не ваша вина, это ошибка MonoTouch.

CGPDFDictionary создается с помощью дескриптора CGPDFPage (хотя он должен был быть создан с помощью вызова CGPDFPageGetDictionary для дескриптора CGPDFPage).

Вы можете обойти эту ошибку, добавив pinvoke в свое приложение:

[System.Runtime.InteropServices.DllImport ("/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics")]
private static extern IntPtr CGPDFPageGetDictionary (IntPtr pageHandle);

и создание словаря самостоятельно:

IntPtr handle = CGPDFPageGetDictionary (oPage.Handle);
    MonoTouch.CoreGraphics.CGPDFDictionary oDict = new MonoTouch.CoreGraphics.CGPDFDictionary (handle);
...