Ассоциация типов документов, вызывающая сбой приложения, когда оно не запущено - PullRequest
0 голосов
/ 22 мая 2018

Я создал свой PDF Viewer и хочу связать с ним формат файла PDF, чтобы я мог открыть файл PDF из Finder , Терминал или Drag & Drop .Если я запускаю приложение, а затем пытаюсь открыть pdf одним из 3-х способов, упомянутых до того, как документ отображается правильно, но если я делаю то же самое, когда приложение не открыто, оно падает.

Здесьмои CFBundleDocumentTypes настройки (из файла info.plist ):

<key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeExtensions</key>
            <array>
                <string>pdf</string>
            </array>
            <key>CFBundleTypeIconFile</key>
            <string>pdfformat</string>
            <key>CFBundleTypeName</key>
            <string>pdf</string>
            <key>CFBundleTypeRole</key>
            <string>Viewer</string>
            <key>LSHandlerRank</key>
            <string>Default</string>
            <key>LSItemContentTypes</key>
            <array>
                <string>giannigianino.Mirror</string>
            </array>
            <key>LSTypeIsPackage</key>
            <integer>1</integer>
        </dict>
    </array>

Здесь, где происходит сбой из отчета о сбое:

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   username.Mirror            0x0000000106a4d6e2 _T06Mirror11AppDelegateC11applicationSbSo13NSApplicationC_SS8openFiletF + 1090
1   username.Mirror            0x0000000106a4d749 _T06Mirror11AppDelegateC11applicationSbSo13NSApplicationC_SS8openFiletFTo + 89
2   com.apple.AppKit                0x00007fff9f355bd3 -[NSApplication _doOpenFile:ok:tryTemp:] + 322
3   com.apple.AppKit                0x00007fff9f1407df -[NSApplication(NSAppleEventHandling) _openDocumentURLs:withCompletionHandler:] + 996

Ятакже с использованием пользовательского значка PDF, но он не отображается, даже если в качестве предпочтительного приложения для моего приложения открыты все файлы PDF.

1 Ответ

0 голосов
/ 23 мая 2018

Я решил проблему.По сути, происходит сбой в методе application(_:openFile:), где я вызывал свой mainViewController до его создания.Решение состояло в том, чтобы переместить код в applicationWillFinishLaunching(_:), который отправляется в Делегат Приложения до application(_:openFile:), а не в applicationDidFinishLaunching(_:), который отправляется после.

...