web-dev-qa-db-ja.com

BSXPCMessageは次のメッセージのエラーを受信しました:接続が中断されました

更新:参照番号19285042およびバグレポートをAppleに送信

非常に奇妙なエラーで、オンラインで何も見つかりません。 「BSXPCMessageはメッセージのエラーを受信しました:接続が中断されました」

基本的なフィルターアプリケーションをいくつか実行しています。エラーメッセージは、UIImageView.imageを別のUIImageに再割り当てした場合にのみ発生します。その行だけをコメントアウトすると、エラーは発生しません。したがって、信じられないほど役立つUIImageViewにフィルターされたイメージを割り当てると、このメッセージが表示される理由を考えることができます。

このエラーの原因をご提案いただければ幸いです。

#import "FilterTestsViewController.h"

@interface FilterTestsViewController ()

@end

@implementation FilterTestsViewController

UIImage* _originalImage;
UIImage* _filterImage;
UIImageView* _uiImageView;

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self initialize];
    //flip image by 180*

}

-(void)initialize
{
    _originalImage = [UIImage imageNamed:@"ja.jpg"]; //creates image from file, this will result in a nil CIImage but a valid CGImage;
    [self createFilterImage];
    _uiImageView = [[UIImageView alloc] initWithImage:_filterImage]; //creates a UIImageView with the UIImage
    [self.view addSubview:_uiImageView]; //adds the UIImageView to view;
}

-(void)createFilterImage
{
    NSString* filterName = @"CIFalseColor";
    CIImage* ciImage = [CIImage imageWithCGImage:_originalImage.CGImage];
    CIFilter* filter = [CIFilter filterWithName:filterName keysAndValues:kCIInputImageKey,ciImage, nil];
    _filterImage = [UIImage imageWithCIImage:[filter outputImage]];
}

@end
45
Aggressor

表示されるメッセージは、iOS 8のCIFilterバグによるものです。

XPCサービスは、 安定性の低いコンポーネントを分離することでクラッシュを減らす フィルターやプラグインなどを対象としています。これは通常致命的ではなく、launchdがサービスを再起動することで接続が復元されます。これは長時間実行されるサービスではなく、単なる操作であるため、画像フィルターが実際に適用されていない可能性があります。

これはiOS 8の非常にバグであり、shouldにファイルする必要があります Radar (バグレポート)Apple iOS 8には(まだ別の)バグがあることを知っています。

それを行う場合は、 Quick Radar をインストールし、レーダー番号を追跡し、同じ問題でStack Overflowの他の多くの同様の質問に回答する必要があります。元の問題を参照するレーダーレポートを重複して提出するように他の人に勧めます。これにより、Appleでのバグの注目度が高まります。

アップルは本当にこれを急いだ。 前述の回避策 は、別のCIFilterサブクラスで必要な処理を実行できる場合は問題ありません。それ以外の場合は、画像をコピーしたり、NSData表現を保存したり、他の方法でCIImageワークフローから削除したりする必要があります。

40
lswank

raywenderlich の記事を読んで、コンテキストにオプションを追加すると、GPUではなくCPUでレンダリングが行われるため、警告が削除されることがわかりました。

let context = CIContext(options:[kCIContextUseSoftwareRenderer : true])

5
coco

私にとっては、何らかの理由でiOS8 +でCIFilterを使用しようとすると問題が発生しましたか?

IOSのバージョンを確認するコードを追加し、それが7.9.9より大きい場合は、次のようなiOS8 +のCIFilterの代替を使用します。 https://stackoverflow.com/a/24083728/2057171

別の補足として、xCode6はプロジェクトからCIFilterフレームワークを完全に(奇妙な)削除しましたが、それを追加してもこのクラッシュは修正されませんでした...

2
Albert Renshaw

これは私のために働いた:

OBJ-C

CIContext *context = [CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer:@(YES)}];

Swift

let context = CIContext(options:[kCIContextUseSoftwareRenderer : true])

参照: https://stackoverflow.com/a/29872829/3411787

0
Zaid Pathan