के माध्यम से एक NSArray डिकोडिंग मैं यह पता लगाने की क्यों इस वर्ग की डिकोडिंग असफल रहा था की कोशिश कर दीवार के खिलाफ मेरे सिर पीटने सभी दोपहर बिताया। कक्षा में ऐसी संपत्ति है जो फू ऑब्जेक्ट्स का एनएसएआरएआरई है। Foo NSSecureCoding के अनुरूप है, और मैंने सफलतापूर्वक उस कक्षा को सफलतापूर्वक एन्कोड किया है और डीकोड किया है। मुझे initWithCoder में एक त्रुटि मिल रही थी: जो कक्षा Foo को डीकोड करने में विफल रहा। कुछ प्रयोगों के माध्यम से, मैंने पाया कि मुझे [Foo क्लास] को initWithCoder में जोड़ने की आवश्यकता है: इसे काम करने के लिए। शायद यह किसी और की मदद करेगा जिसकी एक ही समस्या है। मेरा सवाल है, यह क्यों जरूरी है? मुझे कोई सुझाव नहीं मिला कि यह एप्पल के दस्तावेज में आवश्यक है।अजीब behavoir जब NSSecureCoding
#import "Foo.h"
@interface MyClass : NSObject <NSSecureCoding>
@property (nonatomic) NSArray *bunchOfFoos;
@end
@implementation MyClass
static NSString *kKeyFoo = @"kKeyFoo";
+ (BOOL) supportsSecureCoding
{
return YES;
}
- (void) encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:self.bunchOfFoos forKey:kKeyFoo];
}
- (id) initWithCoder:(NSCoder *)decoder
{
if (self = [super init])
{
[Foo class]; // Without this, decoding fails
_bunchOfFoos = [decoder decodeObjectOfClass:[NSArray class] forKey:kKeyFoo];
}
return self;
}
@end
मुझे लगता है कि आप क्या हासिल करने की कोशिश कर रहे हैं के लिए आप एन्कोडिंग/लागू करने के लिए फू कक्षा में डिकोडिंग की जरूरत है। – zaph
हां, मैंने कहा कि फू NSSecureCoding के अनुरूप है, जिसका मतलब है कि उस वर्ग में एन्कोडिंग/डिकोडिंग लागू किया गया है। –