thực hiện của tôi cho một cái gì đó tương tự như sau và hoạt động hoàn hảo:
Đối tượng tùy chỉnh (Settings) nên thực hiện các giao thức NSCoding:
-(void)encodeWithCoder:(NSCoder *)encoder{
[encoder encodeObject:self.difficulty forKey:@"difficulty"];
[encoder encodeObject:self.language forKey:@"language"];
[encoder encodeObject:self.category forKey:@"category"];
[encoder encodeObject:self.playerType forKey:@"playerType"];
}
- (id)initWithCoder:(NSCoder *)decoder {
if (self = [super init]) {
self.difficulty = [decoder decodeObjectForKey:@"difficulty"];
self.language = [decoder decodeObjectForKey:@"language"];
self.category = [decoder decodeObjectForKey:@"category"];
self.playerType = [decoder decodeObjectForKey:@"playerType"];
}
return self;
}
Các mã sau đây viết đối tượng tùy chỉnh vào một tập tin (set.txt) và sau đó khôi phục nó vào mảng myArray:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"set.txt"];
NSMutableArray *myObject=[NSMutableArray array];
[myObject addObject:self.settings];
[NSKeyedArchiver archiveRootObject:myObject toFile:appFile];
NSMutableArray* myArray = [NSKeyedUnarchiver unarchiveObjectWithFile:appFile];
Điều này sẽ có nhiều phiếu bầu hơn. Giải pháp hoàn chỉnh và thực sự giúp tôi. Cảm ơn! – ChrisC
FYI: Miễn là đối tượng tùy chỉnh của bạn tuân thủ 'NSCoding' và triển khai' initWithCoder: 'và' encodeWithCoder: ', bạn có thể sử dụng nó làm đối tượng gốc khi lưu trữ. Không cần phải đặt nó trong một 'NSMutableArray' như trong mã này. –
FYI: Hãy xem http://nshipster.com/nscoding/ nếu bạn muốn biết thêm thông tin về cách thức, thời điểm và lý do của NSKeyedArchiver và NSCoding. – haxpor