添加项目并将其保存到收藏夹
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 对象
该代码是示例,未经测试。可能有错别字
我有一个包含很多单词的表格视图,我想添加收藏夹功能,这样每个详细视图都可以有一个按钮来保存为收藏夹。这是我的代码,但不起作用,按下按钮后出现此错误(属性 列表不能包含 '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 对象
该代码是示例,未经测试。可能有错别字