High Sierra (10.13) で動作するコードがあり、並べ替え記述子の配列を NSData に正常にアーカイブおよびアーカイブ解除していましたが、Mojave (10.14) では操作呼び出しが非推奨になりました。これは機能したコードです:
NSArray<NSSortDescriptor*> *sortSettings = @[[NSSortDescriptor sortDescriptorWithKey:@"title" ascending:NO]];
NSData *sortData = [NSKeyedArchiver archivedDataWithRootObject:sortSettings];
NSArray<NSSortDescriptor*> *unarchivedSettings = [NSKeyedUnarchiver unarchiveObjectWithData:sortData];
// Test case passes
XCTAssertEqualObjects(unarchivedSettings.firstObject.key, @"title");
非推奨の警告によって提案された呼び出しで、以下のコードを使用してみましたが、機能しません。
NSArray<NSSortDescriptor*> *sortSettings = @[[NSSortDescriptor sortDescriptorWithKey:@"title" ascending:NO]];
NSError *archiveError = nil;
NSData *sortData = [NSKeyedArchiver archivedDataWithRootObject:sortSettings
requiringSecureCoding:YES
error:&archiveError];
// Test cases pass
XCTAssertNotNil(sortData);
XCTAssertNil(archiveError);
NSError *unarchiveError = nil;
NSArray<NSSortDescriptor*> *unarchivedSettings = [NSKeyedUnarchiver unarchivedObjectOfClass:[NSArray class]
fromData:sortData
error:&unarchiveError];
XCTAssertNotNil(unarchivedSettings); // Fails
XCTAssertNil(unarchiveError); // Fails, with error below
アーカイブは成功し、NSData が返されますが、アーカイブ解除呼び出しはエラーを返します。
Error Domain=NSCocoaErrorDomain Code=4864 "value for key 'NS.objects' was of unexpected class 'NSSortDescriptor'. Allowed classes are '{( NSArray )}'." UserInfo={NSDebugDescription=value for key 'NS.objects' was of unexpected class 'NSSortDescriptor'. Allowed classes are '{( NSArray )}'.}