viewDidLoad:
メソッドにはunloadClipboard:
、ユーザーの画像クリップボードを NSData に変換する、呼び出されるビットが含まれています。理論上はすべて正常に動作するはずですが、バックグラウンド スレッドで実行しているにもかかわらず、初期化に時間がかかりすぎるため、このコードでウィジェットがクラッシュします。
if (copiedImage && self.imageFunctionalityEnabled) {
//Item is an image, get data
dispatch_async(dispatch_get_global_queue(0, DISPATCH_QUEUE_PRIORITY_DEFAULT), ^{
NSData *data = UIImageJPEGRepresentation([[UIPasteboard generalPasteboard] image], 0.032);
//If data isn't already added
if (![imageArray containsObject:data]) {
[imageArray addObject:data];
}
//Sync the defaults
[defaults setObject:imageArray forKey:@"imagesArray"];
[defaults synchronize];
UIImage *image = [UIImage imageWithData:[imageArray lastObject]];
dispatch_async(dispatch_get_main_queue(), ^{
_imageView.image = image;
});
});
} else if (copiedString && ![textArray containsObject:copiedString]) {
[textArray addObject:copiedString];
[defaults setObject:textArray forKey:@"array"];
[defaults setObject:imageArray forKey:@"imagesArray"];
_imageView.image = [UIImage imageWithData:[imageArray lastObject]];
} else {
[defaults setObject:imageArray forKey:@"imagesArray"];
_imageView.image = [UIImage imageWithData:[imageArray lastObject]];
}
いくつかのブレークポイント、NSLog、およびウィジェット ターゲットのプロファイリングに時間をかけた後、この行は時間がかかりすぎると思われる行であるという結論に達しました。
NSData *data = UIImageJPEGRepresentation([[UIPasteboard generalPasteboard] image], 0.032);
クラッシュ レポートの例を次に示します。
例外の種類: EXC_CRASH (SIGABRT) 例外のサブタイプ: LAUNCH_HANG 例外メッセージ: 拡張機能の初期化に時間がかかりすぎました
ウィジェットが正常に実行されたそのブロックからコードをコメントアウトすることによっても、問題を切り分けることに成功しました。どんな助けでも大歓迎です。
更新:変更を加えたコードは次のとおりです。
if (copiedImage && self.imageFunctionalityEnabled) {
//Item is an image, get data
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSData *data = UIImageJPEGRepresentation(copiedImage, 0.032);
//If data isn't already added
if (![imageArray containsObject:data]) {
[imageArray addObject:data];
}
//Sync the defaults
[defaults setObject:imageArray forKey:@"imagesArray"];
[defaults synchronize];
UIImage *image = [UIImage imageWithData:[imageArray lastObject]];
dispatch_async(dispatch_get_main_queue(), ^{
_imageView.image = image;
});
});
} else if (copiedString && ![textArray containsObject:copiedString]) {
[textArray addObject:copiedString];
[defaults setObject:textArray forKey:@"array"];
[defaults setObject:imageArray forKey:@"imagesArray"];
_imageView.image = [UIImage imageWithData:[imageArray lastObject]];
} else {
[defaults setObject:imageArray forKey:@"imagesArray"];
_imageView.image = [UIImage imageWithData:[imageArray lastObject]];
}
ログは次のとおりです。
12 月 1 日 18:41:57 Isa-Ranjhas-iPhone ReportCrash[7074]: プロセス CopyfeedWidget[7073] のクラッシュ レポートの作成41:57 Isa-Ranjhas-iPhone SpringBoard[328]: プラグイン com.isaranjha.Copyfeed.CopyfeedWidget が 12 月 1 日に中断されました18:41:57 Isa-Ranjhas-iPhone mediaserverd[22]: '' (pid = 7073) 設定 DiscoveryMode = DiscoveryMode_None、currentDiscoveryMode = DiscoveryMode_PresenceScan 12 月 1 日 18:41:57 Isa-Ranjhas-iPhone assertiond[63]: pid_suspend が失敗しました: 不明なエラー: -1、不明なエラー: -1 Dec 1 18:41:57 Isa-Ranjhas-iPhone assertiond[63]: アサーションに失敗しました: 12B436: assertiond + 57724 [10EC04AD-D18F-3ECD-8A8E-FBB1CC4E2BD6]:0x3 Dec 1 18:41:57 Isa-Ranjhas-iPhone assertiond[63]: 優先度を 2 に設定できませんでした。優先度: そのようなプロセスはありません。 Dec 1 18:41:57 Isa-Ranjhas-iPhone assertiond[63]: できません優先度を 4096 に設定、優先度: そのようなプロセスはありません。 -Ranjhas-iPhone pkd[5114]: プラグイン com.isaranjha.Copyfeed.CopyfeedWidget(1.0) をプラグイン サンドボックスに割り当てます。 com.isaranjha.Copyfeed.CopyfeedWidget(1.0) CAF48DC4-9AD3-4E4F-82F5-F77903676E1F /private/var/mobile/Containers/Bundle/Application/E12BF21F-02A5-4E06-8D4C-CA2DEBCA3850/Copyfeed.app/PlugIns/CopyfeedWidget 内.appex57 Isa-Ranjhas-iPhone assertiond[63]: 優先度を 2 に設定できませんでした、優先度: そのようなプロセスはありません: そのようなプロセスはありません。 ] : プラグイン com.isaranjha.Copyfeed.CopyfeedWidget(1.0) をプラグイン サンドボックスに割り当てます。 CopyfeedWidget(1.0) CAF48DC4-9AD3-4E4F-82F5-F77903676E1F /private/var/mobile/Containers/Bundle/Application/E12BF21F-02A5-4E06-8D4C-CA2DEBCA3850/Copyfeed.app/PlugIns/CopyfeedWidget.appex57 Isa-Ranjhas-iPhone assertiond[63]: 優先度を 2 に設定できませんでした、優先度: そのようなプロセスはありません: そのようなプロセスはありません。 ] : プラグイン com.isaranjha.Copyfeed.CopyfeedWidget(1.0) をプラグイン サンドボックスに割り当てます。 CopyfeedWidget(1.0) CAF48DC4-9AD3-4E4F-82F5-F77903676E1F /private/var/mobile/Containers/Bundle/Application/E12BF21F-02A5-4E06-8D4C-CA2DEBCA3850/Copyfeed.app/PlugIns/CopyfeedWidget.appexそのようなプロセスはありません。識別子 'com.isaranjha.Copyfeed.CopyfeedWidget' を持つウィジェットが予期せず切断されました 12 月 1 日 18:41:57 Isa-Ranjhas-iPhone pkd[5114] : プラグイン com.isaranjha.Copyfeed.CopyfeedWidget(1.0) をプラグイン サンドボックス 12 月 1 に割り当てます18:41:57 Isa-Ranjhas-iPhone pkd[5114] : プラグイン com.isaranjha.Copyfeed.CopyfeedWidget(1.0) の pid=328 を有効にします CAF48DC4-9AD3-4E4F-82F5-F77903676E1F /private/var/mobile/Containers /バンドル/アプリケーション/E12BF21F-02A5-4E06-8D4C-CA2DEBCA3850/Copyfeed.app/PlugIns/CopyfeedWidget.appexそのようなプロセスはありません。識別子 'com.isaranjha.Copyfeed.CopyfeedWidget' を持つウィジェットが予期せず切断されました 12 月 1 日 18:41:57 Isa-Ranjhas-iPhone pkd[5114] : プラグイン com.isaranjha.Copyfeed.CopyfeedWidget(1.0) をプラグイン サンドボックス 12 月 1 に割り当てます18:41:57 Isa-Ranjhas-iPhone pkd[5114] : プラグイン com.isaranjha.Copyfeed.CopyfeedWidget(1.0) の pid=328 を有効にします CAF48DC4-9AD3-4E4F-82F5-F77903676E1F /private/var/mobile/Containers /バンドル/アプリケーション/E12BF21F-02A5-4E06-8D4C-CA2DEBCA3850/Copyfeed.app/PlugIns/CopyfeedWidget.appex57 Isa-Ranjhas-iPhone SpringBoard[328]: 識別子 'com.isaranjha.Copyfeed.CopyfeedWidget' を持つウィジェットが予期せず切断されました。 Copyfeed.CopyfeedWidget(1.0) をプラグイン サンドボックスへ82F5-F77903676E1F /private/var/mobile/Containers/Bundle/Application/E12BF21F-02A5-4E06-8D4C-CA2DEBCA3850/Copyfeed.app/PlugIns/CopyfeedWidget.appex57 Isa-Ranjhas-iPhone SpringBoard[328]: 識別子 'com.isaranjha.Copyfeed.CopyfeedWidget' を持つウィジェットが予期せず切断されました。 Copyfeed.CopyfeedWidget(1.0) をプラグイン サンドボックスへ82F5-F77903676E1F /private/var/mobile/Containers/Bundle/Application/E12BF21F-02A5-4E06-8D4C-CA2DEBCA3850/Copyfeed.app/PlugIns/CopyfeedWidget.appex57 Isa-Ranjhas-iPhone pkd[5114] : プラグイン com.isaranjha.Copyfeed.CopyfeedWidget(1.0) の pid=328 を有効にします CAF48DC4-9AD3-4E4F-82F5-F77903676E1F /private/var/mobile/Containers/Bundle/Application /E12BF21F-02A5-4E06-8D4C-CA2DEBCA3850/Copyfeed.app/PlugIns/CopyfeedWidget.appex57 Isa-Ranjhas-iPhone pkd[5114] : プラグイン com.isaranjha.Copyfeed.CopyfeedWidget(1.0) の pid=328 を有効にします CAF48DC4-9AD3-4E4F-82F5-F77903676E1F /private/var/mobile/Containers/Bundle/Application /E12BF21F-02A5-4E06-8D4C-CA2DEBCA3850/Copyfeed.app/PlugIns/CopyfeedWidget.appex