我试图将我的nsmutablearray保存到磁盘, 数组看起来:
self.tableData = [[NSMutableArray alloc] initWithObjects:
[[Cell alloc] initWithName:@"dawdw" andImage:@"dwddw" andDescription:@"dawdw" andTypes:@"dawwd dawwd" andforWho:@"dwaadw"],
[[Cell alloc] initWithName:@"Kabanos" andImage:@"spodwwdwdrt.jpg" andDescription:@"dwdw" andTypes:@"dwdw dww" andforWho:@"dawwd"],
[[Cell alloc] initWithName:@"dwwd" andImage:@"dwwd" andDescription:@"dwwd" andTypes:@"wdwd daww" andforWho:@"dadawwa"],nil];
//execution
[self writeToPlist:@"fav.txt" withData:self.tableData];
- (void) writeToPlist: (NSString*)fileName withData:(NSMutableArray *)data
{
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *finalPath = [documentsDirectory stringByAppendingPathComponent:fileName];
[data writeToFile:finalPath atomically: YES];
}
//loading
- (NSMutableArray *) readFromPlist: (NSString *)fileName {
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *finalPath = [documentsDirectory stringByAppendingPathComponent:fileName];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:finalPath];
if (fileExists) {
NSMutableArray *arr = [[NSMutableArray alloc] initWithContentsOfFile:finalPath];
return arr;
} else {
return nil;
}
}
//load
self.tableData = [self readFromPlist:@"fav.txt"];
,遗憾的是最后tableData是空的,我尝试了几种方法来保存nsmutablearray,但我无法弄清楚如何。
答案 0 :(得分:1)
当您的可变数组包含自定义对象时,操作系统将不知道如何编码和解码它们。 可以通过将以下函数添加到类中来对自定义类进行编码和解码。 确保该课程符合 NSCoding
- (id)initWithCoder:(NSCoder *)decoder {
self = [super init];
if (!self) {
return nil;
}
self.var1 = [decoder decodeObjectForKey:@"var1"];
self.var2 = [decoder decodeObjectForKey:@"var2"];
.. and so on
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:self.var1 forKey:@"var1"];
[encoder encodeObject:self.var2 forKey:@"var2"];
}
现在存档 -
[NSKeyedArchiver archiveRootObject:<array of objects> toFile:@"/path/to/archive"];
取消归档
[NSKeyedUnarchiver unarchiveObjectWithFile:@"/path/to/archive"];
H个
答案 1 :(得分:0)
来自文档:
如果数组的内容都是属性列表对象( NSString , NSData , NSArray 或 NSDictionary 对象),由此写入的文件 方法可用于使用类方法初始化新数组 arrayWithContentsOfFile:或实例方法 initWithContentsOfFile :.此方法递归验证所有 在写出之前,包含的对象是属性列表对象 file,如果所有对象都不是属性列表对象,则返回NO, 因为结果文件不是有效的属性列表。
(强调我的)
您可以在Cell类上创建一个方法,将其转换为NSData
或任何其他属性列表对象,将其放入数组然后保存。