2014-09-26 3 views
43

UPDATE: ссылка # 19285042 и отправить сообщение об ошибке в яблокеBSXPCMessage получил ошибку на сообщение: Соединение прервано

Очень странно ошибка и ничего не найти в Интернете. Его высказывание «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

Я получил ту же ошибку в XCode 6, также используя CIFilters очень похожим образом. Раньше я никогда не видел BSXPC, и я не знаю, что это такое. Я нашел этот смысл, отображающий ту же проблему в совершенно другом контексте: https://gist.github.com/saurabh360/19d739e3c0ccee1caf34 – michaelsnowden

+0

У меня нет подсказки, но если я что-то переверну, я отвечу на это. – Aggressor

+0

Это связано с памятью в ios 8. Когда я запускаю тот же код через Xcode 5 и ios 7, я получаю предупреждение о памяти, но по какой-либо причине он не генерируется в ios 8. Профайлер памяти через Xcode 6 также не показывает увеличенного использования памяти. Итак, я не совсем уверен, что это за история. – puzzl

ответ

39

сообщения вы получаете это из-за ошибки в CIFilter прошивке 8.

XPC услуги предназначены для reduce crashes by isolating less stable components таких как фильтры и плагины. Обычно это не фатально, и соединение будет восстановлено при перезапуске службы launchd. Поскольку это не длинный сервис, а просто операция, скорее всего, ваш фильтр изображения фактически не применяется.

Это очень ошибка в прошивке 8, и вы должны файл (сообщение об ошибке) в Radar, чтобы компания Apple знает, что (еще один кусок) IOS 8 есть ошибка.

Если вы собираетесь это сделать, вы должны установить Quick Radar, отслеживать номер радара и отвечать на многие другие подобные вопросы о переполнении стека с той же проблемой. Поощряйте других людей подавать дублированный радарный отчет, ссылающийся на вашу оригинальную проблему. Это даст больше внимания Apple.

Apple действительно бросился сюда один. previously mentioned workaround подходит, если вы можете создать другой подкласс CIFilter, сделайте то, что хотите. В противном случае вам просто придется возиться с копированием изображения, сохранить его представление NSData или иным образом удалить его из рабочего процесса CIImage каким-либо другим способом.

+1

Я сделал, и они перестали отвечать. Но я ценю дополнительную информацию! – Aggressor

+0

Не могли бы вы дать нам номер ошибки Radar? Я отредактирую этот вопрос так, чтобы он содержал решение, которое будет: «Пишите дубликат Radar, ссылающийся на этот оригинальный радар». Тогда вы можете выбрать это как «Решение». Это заставит других людей подать дубликат Radar, привлекая внимание Apple. – lswank

+0

Я добавил свой номер для сообщения об ошибке – Aggressor

2

Для меня проблема возникла, когда я попытался использовать CIFilters в iOS8 + по какой-то причине?

Я добавил код, чтобы проверить IOS версии, и если это было больше, чем 7.9.9 я хотел бы использовать CIFilter замену, что это iOS8 + как: https://stackoverflow.com/a/24083728/2057171

На отдельной боковой ноте, xCode6 удалила рамки CIFilter от моего проект в целом (странно), но добавив его обратно не исправить эту аварию ...

+0

Я только что придумал, когда появился диалоговое окно Game Center GKMatchmaker. Это собственный диалог Apple, и я думаю, что они делают то, что CI не понравилось. – BGreenstone

+0

Оглядываясь назад, я смог сделать реальные работы CIFilters, мне просто нужно было их кодировать по-другому, я не помню, что я сделал, это было некоторое время назад, но я думаю, что это связано с тем, что CIFilter не работает основной поток или что-то (что вы могли бы сделать в iOS7, но они почему-то остановили вас от работы в iOS8). –

5

Из чтения статьи raywenderlich я обнаружил, что добавление опции в контекст, так что рендеринг выполняется в ЦП, а не в графическом процессоре, удалит предупреждение.

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

0

Это работает для меня:

Obj-C

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

Swift

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

Ref: https://stackoverflow.com/a/29872829/3411787

Смежные вопросы