我在10.8的一個應用程序中使用XPC。它具有爲導出界面和遠程界面定義的協議的標準設置。我遇到的問題是在導出的界面上使用我的一種方法。XPC沒有正確註冊類的集合
我有一個模型類,讓我們只是叫它Foo
。該類符合NSSecureCoding
,實現+supportsSecureCoding
,並使用安全編碼方法正確編碼/解碼內部屬性。當通過只包含單個實例的導出接口上的方法傳遞此對象時,它可以正常工作。
當我想要傳遞這些對象的集合或的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