NSKeyedArchiver archivedDataWithRootObject: не вызывает encodeWithCoder - PullRequest
1 голос
/ 02 февраля 2012

Я не могу получить метод archivedDataWithRootObject для вызова encodeWithCoder, насколько я понимаю, он довольно прост, но он не работает Вот код:

#import <Foundation/Foundation.h>

@interface Details : NSObject <NSCoding>{

NSMutableArray *myArray;
}

@property(nonatomic,retain) NSMutableArray *myArray;

@end

#import "Details.h"

@implementation Details
@synthesize myArray;


-(id)init{
 [super init];
 return self;
}

-(id)initWithCoder:(NSCoder *)aDecoder{

NSLog(@"initWithCoder");
if (self = [super init])
{
    self.myArray = [[aDecoder decodeObjectForKey:@"details"]retain];

} 
return self;
}

- (NSMutableArray*)getDetails{

NSLog(@"getDetials");
// NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *details = [[NSUserDefaults standardUserDefaults] objectForKey:@"details"];
if (details != nil){ 
  NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:details];
    if (oldSavedArray != nil)
        self.myArray = [[NSMutableArray alloc] initWithArray:oldSavedArray];
    else
        self.myArray = [[NSMutableArray alloc] initWithCapacity:1];
 }
 return self.myArray;
}

- (void) addDetails:(NSMutableArray *)details{

      NSLog(@"add Details");

     [self.myArray addObject:details]; 
     [NSKeyedArchiver archivedDataWithRootObject:self.myArray];
  }

- (void) encodeWithCoder:(NSCoder *)coder;
{
  NSLog(@"encodeWithCoder");
  [coder encodeObject:self.myArray forKey:@"details"];
} 

@end

NSLog (@ "encodeWithCoder") не запускается. Я мог бы что-то упустить, Если у кого-то есть идеи, это будет оценено.

1 Ответ

1 голос
/ 02 февраля 2012
[NSKeyedArchiver archivedDataWithRootObject:self.myArray];

Вы говорите NSKeyedArchiver архивировать переменную myArray, а не объект, который вы только что реализовали <NSCoding> с помощью!

Также этот метод возвращает NSData *, который у вас затемдля записи на диск отдельно при необходимости.

Попробуйте:

NSData * archivedData = [NSKeyedArchiver archivedDataWithRootObject:self];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...