2

我有一个 Today 小部件扩展,在该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]];
    }

在一些断点、NSLogs 和对小部件目标进行时间分析之后,我得出的结论是,这行代码耗时过长。

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] 制定崩溃报告 12 月 1 日 18:41:57 Isa-Ranjhas-iPhone CopyfeedWidget[7073]:查看将在 12 月 18 日出现: 41:57 Isa-Ranjhas-iPhone SpringBoard[328]:插件 com.isaranjha.Copyfeed.CopyfeedWidget 于 12 月 1 日中断 18: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 Dec 1 18:41:57 Isa-Ranjhas-iPhone assertiond[63]:pid_suspend 失败:未知错误:-1,未知错误:-1 Dec 1 18:41:57 Isa-Ranjhas-iPhone 断言 [63]:断言失败:12B436:断言 + 57724 [10EC04AD-D18F-3ECD-8A8E-FBB1CC4E2BD6]:0x3 Dec 1 18:41:57 Isa-Ranjhas-iPhone assertiond[63]:无法将优先级设置为 2,优先级:没有这样的过程 12 月 1 日 18:41:57 Isa-Ranjhas-iPhone assertiond[63]:不能将优先级设置为 4096,优先级:没有这样的过程 12 月 1 日 18:41:57 Isa-Ranjhas-iPhone SpringBoard[328]:标识符为“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]:为插件启用 pid=328在 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,优先级:没有此类进程 12 月 1 日 18:41:57 Isa-Ranjhas-iPhone assertiond[63]:无法将优先级设置为 4096,优先级:没有这样的过程 12 月 1 日 18:41:57 Isa-Ranjhas-iPhone SpringBoard[328]:标识符为“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 启用 pid=328。 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,优先级:没有此类进程 12 月 1 日 18:41:57 Isa-Ranjhas-iPhone assertiond[63]:无法将优先级设置为 4096,优先级:没有这样的过程 12 月 1 日 18:41:57 Isa-Ranjhas-iPhone SpringBoard[328]:标识符为“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 启用 pid=328。 CopyfeedWidget(1.0) CAF48DC4-9AD3-4E4F-82F5-F77903676E1F /private/var/mobile/Containers/Bundle/Application/E12BF21F-02A5-4E06-8D4C-CA2DEBCA3850/Copyfeed.app/PlugIns/CopyfeedWidget.appex没有这样的过程 12 月 1 日 18:41:57 Isa-Ranjhas-iPhone assertiond[63] :无法将优先级设置为 4096,优先级:没有这样的过程 12 月 1 日 18:41:57 Isa-Ranjhas-iPhone SpringBoard[328] :带有标识符 '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) CAF48DC4-9AD3-4E4F-82F5-F77903676E1F /private/var/mobile/Containers 启用 pid=328 /Bundle/Application/E12BF21F-02A5-4E06-8D4C-CA2DEBCA3850/Copyfeed.app/PlugIns/CopyfeedWidget.appex没有这样的过程 12 月 1 日 18:41:57 Isa-Ranjhas-iPhone assertiond[63] :无法将优先级设置为 4096,优先级:没有这样的过程 12 月 1 日 18:41:57 Isa-Ranjhas-iPhone SpringBoard[328] :带有标识符 '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) CAF48DC4-9AD3-4E4F-82F5-F77903676E1F /private/var/mobile/Containers 启用 pid=328 /Bundle/Application/E12BF21F-02A5-4E06-8D4C-CA2DEBCA3850/Copyfeed.app/PlugIns/CopyfeedWidget.appex57 Isa-Ranjhas-iPhone SpringBoard[328]:标识符为 '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) CAF48DC4-9AD3-4E4F-启用 pid=328 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' 的小部件意外断开 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) CAF48DC4-9AD3-4E4F-启用 pid=328 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

4

0 回答 0