opslaan van aangepast object dat een ander aangepast object bevat in NSUserDefaults

Ik begrijp hoe ik een aangepast object in NSUser Defaults opsla, maar toen ik probeerde een object met een object van een ander type erin op te slaan (het wordt compositie genoemd als ik me niet vergis), dezelfde stappen voor innerlijk object als ik deed voor de eerste kreeg ik een runtime-fout. Kun je alsjeblieft een minutieuze beschrijving geven van de stappen die ik moet ondernemen om alles op te slaan en op te halen

0
Laat ons zien wat je hebt gedaan (je code) en we zullen je vertellen wat er mis mee is.
toegevoegd de auteur rob mayoff, de bron
En de runtime-fout.
toegevoegd de auteur Josh Caswell, de bron

1 antwoord

Al uw objecten moeten het NSCoding-protocol implementeren. NSCoding werkt recursief voor objecten die zouden worden opgeslagen. U hebt bijvoorbeeld 2 aangepaste klassen

@interface MyClass : NSObject {

}
@property(nonatomic, retain) NSString *myString;
@property(nonatomic, retain) MyAnotherClass *myAnotherClass;

@interface MyAnotherClass : NSObject {

}
@property(nonatomic, retain) NSNumber *myNumber;

Voor het opslaan van het object MyClass op NSUserDefaults moet u het NSCoding-protocol voor beide klassen implementeren:

Voor de eerste klas:

-(void)encodeWithCoder:(NSCoder *)encoder{
    [encoder encodeObject:self.myString forKey:@"myString"];
    [encoder encodeObject:self.myAnotherClass forKey:@"myAnotherClass"];
}

-(id)initWithCoder:(NSCoder *)decoder{
    self = [super init];
    if ( self != nil ) {
        self.myString = [decoder decodeObjectForKey:@"myString"];
        self.myAnotherClass = [decoder decodeObjectForKey:@"myAnotherClass"];
    }
    return self;
}

Voor de tweede klas:

-(void)encodeWithCoder:(NSCoder *)encoder{
    [encoder encodeObject:self.myNumber forKey:@"myNumber"];
}

-(id)initWithCoder:(NSCoder *)decoder{
    self = [super init];
    if ( self != nil ) {
        self.myNumber = [decoder decodeObjectForKey:@"myNumber"];
    }
    return self;
}

Let op, als uw andere klasse (hierboven MyAnotherClass) ook aangepast object heeft, dan moet dat aangepaste object ook NSCoding implementeren. Zelfs als u NSArray heeft, welke implicatie aangepaste objecten bevat, moet u NSCoding voor deze objecten implementeren.

4
toegevoegd
heel erg bedankt maatje
toegevoegd de auteur Andrey Chernukha, de bron
Ik ben er vrij zeker van dat je dit niet kunt doen. stackoverflow.com/a/19720674/8047 U moet eerst converteren naar NSData </​​code>.
toegevoegd de auteur Dan Rosenstark, de bron
kun je me alsjeblieft vertellen in je eerste klas ik heb een array met MyAnotherClass. Hoe kan ik NSCoding gebruiken.
toegevoegd de auteur Kittu, de bron