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

Add and save item to favorites

我有一个包含很多单词的表格视图,我想添加收藏夹功能,这样每个详细视图都可以有一个按钮来保存为收藏夹。这是我的代码,但不起作用,按下按钮后出现此错误(属性 列表不能包含 'CFType' 类型的 objects),但如果我使用 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协议。 在@interface 行中添加协议

 @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 对象

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