更新:参考编号#19285042并向苹果提交错误报告
非常奇怪的错误,没有在网上找到任何东西。它的说法" 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
答案 0 :(得分:40)
您收到的消息是由iOS 8中的CIFilter错误引起的。
XPC服务意味着reduce crashes by isolating less stable components,例如过滤器和插件。这通常不是致命的,并且startd重新启动服务将恢复连接。由于这不是一个长期运行的服务,而只是一个操作,很可能你的图像过滤器实际上没有被应用。
这是iOS 8中的一个错误,你应该提交Radar(错误报告),让Apple知道(还有一部分)iOS 8有bug
如果你打算这样做,你应该安装Quick Radar,跟踪雷达号码,并回答Stack Overflow上许多其他类似的问题,同样的问题。鼓励其他人提交引用原始问题的重复雷达报告。这将使苹果公司更加关注这个漏洞。
苹果真的把这个赶了出来。 previously mentioned workaround如果你可以做你想要的不同的CIFilter子类就没问题。否则,您只需修改图像,保存其NSData表示,或以其他方式将其从CIImage工作流中删除。答案 1 :(得分:5)
通过阅读raywenderlich文章,我发现在上下文中添加一个选项,以便在CPU而不是GPU中完成渲染,将删除警告。
let context = CIContext(options:[kCIContextUseSoftwareRenderer : true])
答案 2 :(得分:2)
对我来说,当我出于某种原因尝试在iOS8 +中使用CIFilter时,问题就出现了?
我添加了一些代码来检查iOS版本,如果它大于7.9.9,我会使用类似于iOS8 +的CIFilter替代品:https://stackoverflow.com/a/24083728/2057171
另一方面,xCode6完全从我的项目中删除了CIFilter框架(奇怪),但是添加它并没有解决这个崩溃......
答案 3 :(得分:0)
这对我有用:
OBJ-C
CIContext *context = [CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer:@(YES)}];
<强>夫特强>
let context = CIContext(options:[kCIContextUseSoftwareRenderer : true])