gpt4 book ai didi

objective-c - 将具有属性的对象数组保存到 plist

转载 作者:太空狗 更新时间:2023-10-30 03:54:07 31 4
gpt4 key购买 nike

我有一个可变数组,其中包含不同的对象,例如字符串、UIImage 等。它们是这样排序的:

例子:

BugData *bug1 = [[BugData alloc]initWithTitle:@"Spider" rank:@"123" thumbImage:[UIImage imageNamed:@"1.jpeg"]];
...
...
NSMutableArray *bugs = [NSMutableArray arrayWithObjects:bug1,bug2,bug3,bug4, nil];

所以基本上它是一个包含具有不同属性的对象的数组。

我试图用下一个代码将单个字符串保存到一个文件中,它工作正常,但是当我尝试用对象保存数组时,我得到一个空的 plist 文件。

NSString *docsDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSString * path = [docsDir stringByAppendingPathComponent:@"data.plist"];
NSLog(@"%@",bugs); //Making sure the array is full
[bugs writeToFile:path atomically:YES];

我做错了什么?

最佳答案

当你将字符串或任何原始数据写入 plist 时,它可以直接保存。但是当你试图保存一个对象时,你需要使用 NSCoding。

您必须实现两个方法 encodeWithCoder: 来写入和 initWithCoder: 在您的 BugData 类中读回它。

编辑:

是这样的:根据您的要求将 Float 更改为 Integer 或 String 或 Array,并为它们提供合适的键。

- (void)encodeWithCoder:(NSCoder *)coder {
[coder encodeObject:_title forKey:@"title"];
[coder encodeFloat:_rating forKey:@"rating"];
NSData *image = UIImagePNGRepresentation(_thumbImage);
[coder encodeObject:(image) forKey:@"thumbImage"];
}


- (id)initWithCoder:(NSCoder *)coder {
_title = [coder decodeObjectForKey:@"title"];
_rating = [coder decodeFloatForKey:@"rating"];
NSData *image = [coder decodeObjectForKey:@"thumbImage"];
_thumbImage = [UIImage imageWithData:image];
return self;
}

甚至this会帮助你。

关于objective-c - 将具有属性的对象数组保存到 plist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13801222/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com