请我试图获得一些核心数据的知识。到目前为止,我已经掌握了创建实体以及从该实体中添加、检索和删除值的窍门。
我的问题如下。NSDictionary
使用核心数据时,在实体中存储属性的可能方式有哪些?
请我试图获得一些核心数据的知识。到目前为止,我已经掌握了创建实体以及从该实体中添加、检索和删除值的窍门。
我的问题如下。NSDictionary
使用核心数据时,在实体中存储属性的可能方式有哪些?
您应该使用“可转换属性”:
*.xcdatamodeld
文件NSManagedObject
子类文件(File->New->File ... NSManagedObject
subclass)*.h
文件并将属性“ info ”的类型从id更改为NSMutableDictionary*其他一切都会自动运行
有几种方法可以解决这个问题:
一个。创建一个代表 NSDictionary 的实体,以便每个字典键都由一个实体属性表示。
湾。如果您不喜欢上述创建单独实体的方法,您仍然可以将 NSDictionary 存储到 NSData 类型的单个核心数据字段中,前提是您首先将 NSDictionary 序列化为 NSData。
//NSDictionary to NSData
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:dictionary forKey:@"Some Key Value"];
[archiver finishEncoding];
// data is now ready to use
当您从 Core Data 读取它时,您还需要将 NSData 转换回 NSDictionary。
// NSData to NSDictionary
NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSDictionary *dictionary = [[unarchiver decodeObjectForKey:@"Some Key Value"] retain];
[unarchiver finishDecoding];
// dictionary is now ready to use
C。最后,您可以使用诸如 Sensible TableView 之类的持久性框架,您的所有数据结构都会在其中自动获取、显示和保存。我自己节省了大量代码。
将属性类型更改为Transformable
。
如果您正在使用 mogenerator(您应该),为可转换生成的默认类型是id
.
要让 mogenerator 生成特定类型,您可以为属性添加一个带有值NSDictionary
的自定义键。请参阅此屏幕截图。attributeValueClassName
NSDictionary