Я использую XPC в одном из моих приложений на 10.8. У него стандартная настройка с протоколами, определенными для экспортируемого интерфейса и удаленного интерфейса. Проблема, с которой я сталкиваюсь, - это один из моих методов на экспортированном интерфейсе.XPC не правильно регистрирует классы для сбора
У меня есть класс модели, давайте просто назовите его Foo
. Этот класс соответствует NSSecureCoding
, реализует +supportsSecureCoding
и правильно кодирует/декодирует внутренние свойства с использованием методов безопасного кодирования. При передаче этого объекта с помощью метода на моем экспортированном интерфейсе, который включает только один экземпляр, он отлично работает.
Проблема возникает, когда я хочу передать коллекцию этих объектов, или NSArray
из Foo
объектов. Вот пример того, что подпись на экспортируемый интерфейс выглядит следующим образом:
- (void)grabSomethingWithCompletion:(void (^)(NSArray *foos))completion;
И я белый список в Foo
класс, как указано в документации:
NSSet *classes = [NSSet setWithObject:Foo.class];
[exportedInterface setClasses:classes forSelector:@selector(grabSomethingWithCompletion:) argumentIndex:0 ofReply:YES];
Теперь это должно сделать так, чтобы этот массив можно безопасно скопировать в процессе и декодировать с другой стороны. К сожалению, это, похоже, не работает должным образом.
При вызове методы на экспортированном протоколе, получает исключение:
Предупреждения: Исключение пойманное во время декодирования полученного ответа на сообщение «grabSomethingWithCompletion:», сбросив входящее сообщение и вызывающего блока отказа.
Исключение: Исключение при декодировании аргумента 1 из вызова: возвращаемого значение: {v} недействительной цель: {@?} 0x0 (блок) Аргумент 1: {@} 0x0
Исключение: значение ключа ' NS.objects 'был неожиданным классом ' Foo '. Разрешенные классы: «{( NSNumber, NSArray, NSDictionary, NSString, NSDate, NSData)} '.
Это почти похоже, что он даже не зарегистрировал белый список, который я выполнил ранее. Есть предположения?
Выглядит, как будто это и нужно сделать 'NSPropertyListSerialization'. Это также кажется [вы не одиноки] (https://gist.github.com/AlanQuatermain/3209230) – CodaFi