私は、それ自体と循環関係にある1つのCoreDataエンティティを持つ非常に単純なアプリを持っています。このデータを別のアプリのplistとして使用したいと思います。
関係は、親側では「1つ」、子側では「多数」です。
基本的に、一番上に1つのアイテムがあり、次にそのオブジェクトの子、子オブジェクトの子などがあるツリー...
このデータから、リレーションシップを含むエンティティの構造を使用して辞書/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];
現在、オブジェクトは3つだけです。メインオブジェクト、そのオブジェクトの子、およびその子オブジェクトの子。
これにより、3つのオブジェクトを含む配列である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を構造化する方法を誰かに説明してもらえますか?つまり、すべての子が含まれている1つのディレクトリと、その子のディレクトリ内の各子の子などです。