當安全解碼類型的屬性(例如,records
)NSArray
你通常會做:安全地與元素符合協議(NSSecureCoding)解碼的NSArray
[decoder decodeObjectOfClasses:[NSSet setWithObjects:[NSArray class], [ClassOfElementsInArray class], nil] forKey:@"records"];
但你會如何解碼records
,如果所有的基類知道的是records
中的元素符合協議<RecordEntity>
?有沒有最佳做法?
更新
我使用輕量級泛型[NSArray<id<RecordEntity>> class]
測試@DBoyer's suggestion但不幸的是,這並不工作。解碼時,NSKeyedUnarchiver
會引發以下異常,表示僅預期類型爲NSArray
的對象。
-[BaseClassTest testDecode] : failed: caught "NSInvalidUnarchiveOperationException", "value for key 'NS.objects' was of unexpected class 'Record'.
Allowed classes are '{(NSArray)}'."
是的......但這不是向後兼容的,對吧? –
我不知道,但我不明白爲什麼,因爲編譯器的版本不應該對它可以定位的iOS版本有任何影響。我有使用在iOS7模擬器上運行的輕量級泛型的代碼 – DBoyer
@DBoyer有兩種可能性:1.如果它只是編譯時功能,那麼如果您更改數據流中的類,它將不起作用,因爲這必須在運行時檢查。無意義的。 2.如果它在運行時運行,則運行時版本可能會有影響。 (我想它是1,但我沒有測試它。) –