BSXPCMessage消息收到错误:连接中断

更新:参考#19285042并提交错误报告给苹果

非常奇怪的错误,并没有发现任何东西在线。 它说“BSXPCMessage收到错误的消息:连接中断”

我只是做一些基本的filter应用程序。 如果我将UIImageView.image重新分配给另一个UIImage,则会出现该错误消息。 如果我只是注释掉这一行,我不会得到错误。 所以,如果你能想到为什么这个消息出现的时候,我分配一个过滤图像的UIImageView将是非常有帮助的任何理由。

如果你可以build议任何原因这个错误,我将不胜感激。

#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服务旨在通过隔离不太稳定的组件 (如filter和插件)来减less崩溃 。 这通常不是致命的,连接将通过启动重新启动服务来恢复。 由于这不是一个长期运行的服务,而只是一个操作,所以很可能你的图像filter并没有被实际应用。

这是iOS 8中的一个错误,你应该提交一份雷达 (bug报告)让苹果知道(还有一件)iOS 8有一个bug。

如果你打算这样做的话,你应该安装快速雷达 ,跟踪雷达号码,并回答Stack Overflow上的许多其他类似的问题。 鼓励其他人提交引用原始问题的重复雷达报告。 这会给苹果更多的关注。

苹果真的冲了这一个。 前面提到的解决方法是好的,如果你可以做一个不同的CIFilter子类做你想做的。 否则,你只需要修改图像,保存其NSData表示,或以其他方式将其从CIImage工作stream中移除。

从阅读raywenderlich文章,我发现添加一个选项的上下文,以便在CPU而不是GPU完成渲染,将删除警告。

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)}]; 

迅速

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

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