更新:参照番号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
表示されるメッセージは、iOS 8のCIFilterバグによるものです。
XPCサービスは、 安定性の低いコンポーネントを分離することでクラッシュを減らす フィルターやプラグインなどを対象としています。これは通常致命的ではなく、launchdがサービスを再起動することで接続が復元されます。これは長時間実行されるサービスではなく、単なる操作であるため、画像フィルターが実際に適用されていない可能性があります。
これはiOS 8の非常にバグであり、shouldにファイルする必要があります Radar (バグレポート)Apple iOS 8には(まだ別の)バグがあることを知っています。
それを行う場合は、 Quick Radar をインストールし、レーダー番号を追跡し、同じ問題でStack Overflowの他の多くの同様の質問に回答する必要があります。元の問題を参照するレーダーレポートを重複して提出するように他の人に勧めます。これにより、Appleでのバグの注目度が高まります。
アップルは本当にこれを急いだ。 前述の回避策 は、別のCIFilterサブクラスで必要な処理を実行できる場合は問題ありません。それ以外の場合は、画像をコピーしたり、NSData表現を保存したり、他の方法でCIImageワークフローから削除したりする必要があります。
raywenderlich の記事を読んで、コンテキストにオプションを追加すると、GPUではなくCPUでレンダリングが行われるため、警告が削除されることがわかりました。
let context = CIContext(options:[kCIContextUseSoftwareRenderer : true])
私にとっては、何らかの理由でiOS8 +でCIFilterを使用しようとすると問題が発生しましたか?
IOSのバージョンを確認するコードを追加し、それが7.9.9より大きい場合は、次のようなiOS8 +のCIFilterの代替を使用します。 https://stackoverflow.com/a/24083728/2057171
別の補足として、xCode6はプロジェクトからCIFilterフレームワークを完全に(奇妙な)削除しましたが、それを追加してもこのクラッシュは修正されませんでした...
これは私のために働いた:
OBJ-C
CIContext *context = [CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer:@(YES)}];
Swift
let context = CIContext(options:[kCIContextUseSoftwareRenderer : true])