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