iPhone / Objective-C: NSMutableArray writeToFile schreibt nicht in die Datei. Immer gibt KEINE

Ich versuche zu serialisieren zwei NSMutableArrays von NSObjects dass die Umsetzung der NSCoding Protokoll. Aber es funktioniert für einen (stacks) und nicht die andere (cards). Ich habe den folgenden code-block:

-(void) saveCards
{
    NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString* documentsDirectory = [paths objectAtIndex:0];

    NSString* cardsFile = [documentsDirectory stringByAppendingPathComponent:@"cards.state"];
    NSString* stacksFile = [documentsDirectory stringByAppendingPathComponent:@"stacks.state"];
    BOOL c = [rootStack.cards writeToFile:cardsFile atomically:YES];
    BOOL s = [rootStack.stacks writeToFile:stacksFile atomically:YES];
}

Ich Schritt durch diese Methode den debugger, und nachdem die letzten beiden Zeilen code ausgeführt wird, überprüfe ich die Werte der beiden BOOLs. BOOL c ist NO und BOOL s ist YES. Die stacks array ist tatsächlich leer ist (das ist wahrscheinlich, warum es funktioniert). Die cards array-Inhalte hat. Warum ist es, dass das array mit dem Inhalt der ausfällt? Ich kann nicht dieses heraus. Habe ich mich durch zahlreiche threads auf SOF, jeder von Ihnen sagen, das problem ist, weil der Schutz der Dateien, die Sie schrieben, waren Sie daran zu hindern, zu schreiben. Das ist nicht mein problem, wie Schreibe ich den Ordner "Dokumente". Ich habe doppelt und dreifach geprüft, dass weder rootStack.cards noch rootStack.stacks ist null. Und ich habe überprüft, dass die Karten in der Tat haben sich Inhalte.

Hier sind die coder Methoden für meine Notecard Klasse (ich fügte hinzu, alle if - Statements als Teil versuchen, dieses problem zu lösen, stellen Sie sicher, dass Sie versuchen zu codieren, null-Werte nicht etwas zu brechen):

-(void) encodeWithCoder:(NSCoder *)encoder
{
    if(text)
        [encoder encodeObject:text forKey:@"text"];
    if(backText)
        [encoder encodeObject:backText forKey:@"backText"];
    if(x)
        [encoder encodeObject:x forKey:@"x"];
    if(y)
        [encoder encodeObject:y forKey:@"y"];
    if(width)
        [encoder encodeObject:width forKey:@"width"];
    if(height)
        [encoder encodeObject:height forKey:@"height"];
    if(timeCreated)
        [encoder encodeObject:timeCreated forKey:@"timeCreated"];
    if(audioManagerTicket)
        [encoder encodeObject:audioManagerTicket forKey:@"audioManagerTicket"];
    if(backgroundColor)
        [encoder encodeObject:backgroundColor forKey:@"backgroundColor"];
}

-(id) initWithCoder:(NSCoder *)decoder
{
    self = [super init];
    if(!self)
        return nil;

    self.text               = [decoder decodeObjectForKey:@"text"];
    self.backText           = [decoder decodeObjectForKey:@"backText"];
    self.x                  = [decoder decodeObjectForKey:@"x"];
    self.y                  = [decoder decodeObjectForKey:@"y"];
    self.width              = [decoder decodeObjectForKey:@"width"];
    self.height             = [decoder decodeObjectForKey:@"height"];
    self.timeCreated        = [decoder decodeObjectForKey:@"timeCreated"];
    self.audioManagerTicket = [decoder decodeObjectForKey:@"audioManagerTicket"];
    self.backgroundColor    = [decoder decodeObjectForKey:@"backgroundColor"];

    return self;
}

jedes Feld ist entweder ein NSString, NSNumber, oder UIColor.

Vielen Dank für jede Hilfe

InformationsquelleAutor Joel | 2010-05-04
Schreibe einen Kommentar