gpt4 book ai didi

ios - 添加项目并将其保存到收藏夹

转载 作者:行者123 更新时间:2023-11-28 21:43:45 25 4
gpt4 key购买 nike

我有一个包含很多单词的表格 View ,我想添加收藏夹功能,以便每个详细 View 都可以有一个按钮来保存为收藏夹。这是我的代码,但不起作用,按下按钮后出现此错误(属性列表不能包含“CFType”类型的对象),但如果我使用 slovoItem.slovo 或 slovoItem.definice,值将被正确保存。 slovoItem 具有值 slovoItem.slovo 和 slovoItem.definice,我需要完整保存 slovoItem。

我的 DetailViewController 中的代码:

- (IBAction) addToFavorites:(id)sender
{
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];


NSMutableArray *tempArray = [[prefs objectForKey:@"favorite"] mutableCopy];
favorite = tempArray;

[favorite addObject:self.slovoItem];

[prefs setObject:favorite forKey:@"favorite"];

for (id obj in favorite)
{
NSLog(@"%@", obj);
}
}

最佳答案

自定义对象不能写入用户默认值,只能写入 NSString、NSData、NSNumber、NSDate、NSArray 和 NSDictionary 类型。容器类型必须包含 6 种允许类型的项目。

保存自定义类型的常用方法是遵守 NSCoding 协议(protocol)。在@interface 行添加协议(protocol)

 @interface SlovoItem : NSObject <NSCoding> {

在 .m 文件中,您必须实现 initWithCoder:encodeWithCoder: 方法:

  - (instancetype)initWithCoder:(NSCoder *)coder
{
self = [super init];
if (self) {
self.slovo = [coder decodeObjectForKey:@"slovo"];
self.definice = [coder decodeObjectForKey:@"definice"];
}
return self;
}

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

现在您可以使用

保存自定义类型
  - (IBAction) addToFavorites:(id)sender
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *favorite = [[defaults objectForKey:@"favorite"] mutableCopy];
[favorite addObject:[NSKeyedArchiver archivedDataWithRootObject:self.slovoItem]];
[defaults setObject:favorite forKey:@"favorite"];
}

存档器将自定义类型编码为 NSData 对象

该代码是示例,未经测试。可能有错别字

关于ios - 添加项目并将其保存到收藏夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31089751/

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