16

フィードから記事をダウンロードして最新の記事を表示する今日の拡張機能を作成しています。すべてが iOS 8 で問題なく動作し、iOS 8.1 でも引き続き動作し、その後 iOS 8.1.2 が登場し、today 拡張機能が動作しなくなったという苦情が寄せられ始めました。iOS 8.1.2 デバイスでデバッグを試みましたが、拡張機能が起動する前に、次のエラーでクラッシュします。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: <__NSConcreteUUID 0x174027280> 5AFB07AB-5DCD-46FE-8D07-44DE0F3789F2)'

今日の拡張機能を開発するときに頻繁に発生するバグに関するこの投稿を読みました: http://www.atomicbird.com/blog/ios-app-extension-tip

トム・ハリントンは彼の投稿で次のように述べています。

iOS 8 (およびその他の最近のバージョン) では、Xcode のビルド設定でモジュールを有効にするということは、使用するすべてのフレームワークを明示的にリストする必要がないことを意味します。それらは自動的に検出されます。

しかし、これは、Today 拡張機能が使用する NotificationCenter.framework には当てはまりません。ビルド設定からそれを削除すると、ビルドの警告やエラーは発生しません。しかし、拡張機能をロードしようとすると、libextension.dylib から例外が発生し、拡張機能はロードされません。例外メッセージは啓発的ではありません:

2014-08-16 12:06:53.793 TodayTestExtension[41313:6111763] * キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '* setObjectForKey: オブジェクトは nil にできません (キー: <__NSConcreteUUID 0x7fd729422390> BCD5-F3DBA​​6F34DB5)' 今日の拡張機能を実行している場合は、そのフレームワークをビルド設定のままにしてください。そこにある必要はありませんが、あります。

私の拡張機能にはビルド設定に NotificationCenter.framework が含まれていますが、私の問題は何らかの形で似ているのではないかと思います。

誰もが同様の問題に直面しましたか?それを解決する方法はありますか?

4

4 に答える 4

48

このエラーは、存在しない ViewController の名前で (ストーリーボードを使用する代わりに) 基本クラスを定義するために、「Info.plist」内で NSExtensionPrincipalClass を使用した場合にも発生します。

Swift を使用する場合は、"Module.MyViewController" のようにクラスの前にモジュール名 (通常はターゲットの名前) を付けてください。

于 2015-03-23T10:34:14.030 に答える
1

最終的に、ターゲットから NotificationCenter.framework を削除して元に戻し、プロジェクトをクリーンアップしようとしましたが、再び機能するようになりました。結局、フレームワークは適切にリンクされていなかったと思いますが、xcode を使用してターゲットで確認できました。また、なぜそれが機能したのか理解できず、8.1.2 の登場で機能しなくなりました。

于 2015-02-12T13:21:21.440 に答える
0

同じ問題が発生しました。私にとっては、キーボード ターゲットの「一般設定」にある「メイン インターフェイス」プロパティでした。空白だったので、ストーリーボード ファイルに設定したところ、魅力的に機能するようになりました。スクリーンショット

于 2015-02-10T19:37:54.550 に答える