我有一个非常简单的应用程序,其中包含一个与自身存在循环关系的CoreData实体。我想将此数据用作另一个应用程序中的plist。
关系在父类侧为“对一”,在子类侧为“对多”。
基本上是一个树形结构,顶部有一个物品,然后是该对象的子项、子对象的子项等...
我希望从这个数据创建一个具有实体结构及其关系的字典/ pList。(这有意义吗?)
到目前为止,在其他答案的帮助下,我可以获得所有对象的plist(但都在同一“级别”上),或者获得最终父对象的plist(但子关系会出错)。
这是我尝试获取数据并将其保存到桌面的方法:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:ENTITY_NAME];
request.resultType = NSDictionaryResultType;
NSError *fetchError = nil;
NSArray *results = [self.databaseDocument.managedObjectContext executeFetchRequest:request error:&fetchError];
NSLog(@"%@", results);
NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *path = [caches stringByAppendingPathComponent:@"/../../../../../../../../Desktop/my.plist"];
[results writeToFile:path atomically:NO];
目前只有三个对象。一个主对象,一个该对象的子对象,以及一个该子对象的子对象。
这给了我一个plist数组,其中包含三个对象。
如果我包含一个谓词来仅获取没有父级的对象,就像这样:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:ENTITY_NAME];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"parent == nil"];
request.predicate = predicate;
NSError *fetchError = nil;
NSArray *results = [self.databaseDocument.managedObjectContext executeFetchRequest:request error:&fetchError];
NSLog(@"%@", results);
Item *mainItem = [results lastObject];
NSArray *keys = [[[mainItem entity] attributesByName] allKeys];
NSDictionary *dict = [mainItem dictionaryWithValuesForKeys:keys];
NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *path = [caches stringByAppendingPathComponent:@"/../../../../../../../../Desktop/my.plist"];
[dict writeToFile:path atomically:NO];
这个命令可以给我一个目录,但不包括它的子项。
有人能解释一下如何获得像我的实体结构化的plist吗?换句话说,只有一个目录,其中包含所有子目录,并且每个子目录的子项都在该子目录中,依此类推...