NSSecureUnarchiveFromDataTransformer.allowedTopLevelClasses no longer includes NSSet?

477 views Asked by At

In the class header for NSSecureUnarchiveFromDataTransformer it is documented that NSSet is an allowed class.

/// A value transformer which transforms values to and from \c NSData by archiving and unarchiving using secure coding.
API_AVAILABLE(macos(10.14), ios(12.0), watchos(5.0), tvos(12.0))
@interface NSSecureUnarchiveFromDataTransformer : NSValueTransformer

/// The list of allowable classes which the top-level object in the archive must conform to on encoding and decoding.
///
/// Returns the result of \c +transformedValueClass if not \c Nil; otherwise, currently returns \c NSArray, \c NSDictionary, \c NSSet, \c NSString, \c NSNumber, \c NSDate, \c NSData, \c NSURL, \c NSUUID, and \c NSNull.
///
/// Can be overridden by subclasses to provide an expanded or different set of allowed transformation classes.
@property (class, readonly, copy) NSArray<Class> *allowedTopLevelClasses;

@end

However when calling this method I see NSSet is not included in the returned array.

(lldb) po NSSecureUnarchiveFromDataTransformer.allowedTopLevelClasses
<__NSArrayI 0x600003a59fe0>(
NSArray,
NSDictionary,
NSString,
NSNumber,
NSDate,
NSData,
NSURL,
NSUUID,
NSNull
)

I am using NSSet's inside CoreData properties and am getting crashes when using this.

Is this a bug, or has something changed?

0

There are 0 answers