У меня есть NSMutableArray заполнены с объектами моего класса Movie Wich я хочу сохранить, но он не работает, и я не могу понять, почему ...NSUserDefaults не работает с NSKeyedArchiver
Movie.h:
@interface Movie : NSObject <NSCoding>{
NSString *name;
int year;
int length;
NSString *file_size;
int rating;
NSArray *genre;
NSString *plot;
}
@property (nonatomic, retain) NSString *name;
@property (nonatomic, assign) int year;
@property (nonatomic, assign) int length;
@property (nonatomic, retain, retain) NSString *file_size;
@property (nonatomic, assign) int rating;
@property (nonatomic, retain) NSArray *genre;
@property (nonatomic, retain) NSString *plot;
-(id) initWithName:(NSString*)newName year:(int)newYear length:(int)newLength filesize:(NSString*)newFileSize rating:(int)newRating genre:(NSArray*)newGenre plot:(NSString*)newPlot;
- (void) encodeWithCoder : (NSCoder *)encode ;
- (id) initWithCoder : (NSCoder *)decode;
@end
Movie.m:
@implementation Movie
@synthesize name;
@synthesize year;
@synthesize length;
@synthesize file_size;
@synthesize rating;
@synthesize genre;
@synthesize plot;
-(id)initWithName:(NSString *)newName year:(int)newYear length:(int)newLength filesize:(NSString *)newFileSize rating:(int)newRating genre:(NSArray *)newGenre plot:(NSString *)newPlot{
self.name = newName;
self.year = newYear;
self.length = newLength;
self.file_size = newFileSize;
self.rating = newRating;
self.genre = newGenre;
self.plot = newPlot;
return self;
}
- (void)encodeWithCoder:(NSCoder *)encode;
{
[encode encodeObject:name forKey:@"name"];
[encode encodeInt32:year forKey:@"year"];
[encode encodeInt32:length forKey:@"length"];
[encode encodeObject:file_size forKey:@"file_size"];
[encode encodeInt32:rating forKey:@"rating"];
[encode encodeObject:genre forKey:@"genre"];
[encode encodeObject:plot forKey:@"plot"];
}
- (id)initWithCoder:(NSCoder *)decode;
{
NSString *name_decode = [decode decodeObjectForKey:@"name"];
int year_decode = [decode decodeInt32ForKey:@"year"];
int length_decode = [decode decodeInt32ForKey:@"length"];
NSString *file_size_decode = [decode decodeObjectForKey:@"file_size"];
int rating_decode = [decode decodeInt32ForKey:@"rating"];
NSArray *genre_decode = [decode decodeObjectForKey:@"genre"];
NSString *plot_decode =[decode decodeObjectForKey:@"plot"];
return [self initWithName:name_decode year:year_decode length:length_decode filesize:file_size_decode rating:rating_decode genre:genre_decode plot:plot_decode];
}
@end
Сохранить действие (Фильмы является NSMutableArray, содержащий мои объекты):
NSUserDefaults *userDefault=[NSUserDefaults standardUserDefaults];
NSData *encodedData = [NSKeyedArchiver archivedDataWithRootObject:Movies];
[userDefault setObject:encodedData forKey:[NSString stringWithFormat:@"MOVIES"]];
нагрузки Действие:
NSData *decodedData = [userDefault objectForKey: [NSString stringWithFormat:@"MOVIES"]];
NSArray *decodedArray =[NSKeyedUnarchiver unarchiveObjectWithData: decodedData];
Возвращаемый массив всегда (нуль) ... я не имею ключ я попробовал несколько другого рода фрагменты кода я не нашел в Интернете и/или StackOverflow
Благодаря @rmaddy! это сделало это для меня! :)) BTW, фильмы не были проблемой, это был селектор декодирования/кодирования – MothaFvckaJones