gpt4 book ai didi

ios - 基于一对多关系的Coredata NSFetchedResultsController谓词(外部)

转载 作者:行者123 更新时间:2023-12-01 19:51:18 25 4
gpt4 key购买 nike

我的coredata xcdatamodel中具有以下设置:

enter image description here

基本上,网站上有一组文章(TMArticle),这些文章将分为几部分(TMSection)和期刊(TMJournal)。应用程序导航必须首先显示所有部分,然后导航才能仅显示属于所选部分的所有文章中包含的日记列表。我不确定如何在没有逆向关系的情况下完成此任务。理想情况下,在此设置中不需要反向关系(从部分和日记本到文章),但是我该如何写一个符合我所寻找目标的谓词?

我使用以下FRC获取所有文章的列表:

@synthesize articlesFRC = articlesFRC_;
-(NSFetchedResultsController*)articlesFRC {
if (nil==articlesFRC_) {
NSFetchRequest *articlesFR = [NSFetchRequest fetchRequestWithEntityName:[TMArticle entityName]];
NSSortDescriptor *articleSD = [NSSortDescriptor sortDescriptorWithKey:@"nid"
ascending:NO];
[articlesFR setSortDescriptors:[NSArray arrayWithObject:articleSD]];
articlesFRC_ = [[NSFetchedResultsController alloc] initWithFetchRequest:articlesFR
managedObjectContext:[[[RKObjectManager sharedManager] objectStore] managedObjectContextForCurrentThread]
sectionNameKeyPath:nil
cacheName:nil];
[articlesFRC_ setDelegate:self];
[articlesFRC_ performFetch:NULL];
}
return articlesFRC_;
}

但是,我坚持创建FRC的目的是仅获取属于用户已经为其选择了版块谓词谓词的文章的那些日记帐:
@synthesize journalsFRC = journalsFRC_;
-(NSFetchedResultsController*)journalsFRC {
if (nil==journalsFRC_ && nil!=self.selectedSectionManagedObjectID) {
NSFetchRequest *journalFR = [NSFetchRequest fetchRequestWithEntityName:[TMJournal entityName]];
NSSortDescriptor *journalSD = [NSSortDescriptor sortDescriptorWithKey:@"weight"
ascending:YES];
[journalFR setSortDescriptors:[NSArray arrayWithObject:journalSD]];
[journalFR setPredicate:<#(NSPredicate * _Nullable)#>];
journalsFRC_ = [[NSFetchedResultsController alloc] initWithFetchRequest:journalFR
managedObjectContext:[[[RKObjectManager sharedManager] objectStore] managedObjectContextForCurrentThread]
sectionNameKeyPath:nil
cacheName:nil];
[journalsFRC_ setDelegate:self];
[journalsFRC_ performFetch:NULL];
}
return journalsFRC_;
}

我还想确保通过Webservice调用对节选择或文章列表进行的任何更改都应自动更新满足条件的期刊列表,但我不确定如何将其容纳在期刊中。以上谓词。

附加信息:

忘记了前面提到的 分类ID 是Sections(TMSection)和Journals(TMJournal)的主键,而 nid 是文章(TMArticle)的主键。

每个网站的样本Web服务响应:

文章列表:
[
{
"nid": "3",
"listing_post_date": "Tuesday, August 15, 2017 - 19:49",
"listing_updated_date": "Tuesday, August 15, 2017 - 19:49",
"title": "ACL Tear",
"field_journal": [
{
"tid": "6"
},
{
"tid": "7"
}
],
"field_section": [
{
"tid": "2"
},
{
"tid": "8"
}
]
},
{
"nid": "1",
"listing_post_date": "Saturday, March 25, 2017 - 14:23",
"listing_updated_date": "Sunday, April 9, 2017 - 10:51",
"title": "Reverse Total Shoulder arthroplasty",
"field_journal": [
{
"tid": "3"
},
{
"tid": "4"
}
],
"field_section": [
{
"tid": "2"
},
{
"tid": "5"
}
]
}
]

节列表:
[
{
"name": "Sports",
"field_section_image": [],
"tid": "2",
"weight": "0",
"field_section_color": {
"rgb": "#bbf1f3"
}
},
{
"name": "Hand",
"field_section_image": [],
"tid": "5",
"weight": "1",
"field_section_color": {
"rgb": "#96c394"
}
},
{
"name": "Knee",
"field_section_image": [],
"tid": "8",
"weight": "2",
"field_section_color": {
"rgb": "#f29d9d"
}
}
]

期刊列表:
[
{
"name": "Bone &amp; Joint Research",
"tid": "3",
"weight": "0"
},
{
"name": "Sports Journal",
"tid": "7",
"weight": "0"
},
{
"name": "Sports Medicine",
"tid": "4",
"weight": "0"
},
{
"name": "The Knee Journal",
"tid": "6",
"weight": "0"
}
]

最佳答案

您几乎应该始终为每个关系指定逆。在极少数情况下,您的生活会更好。

查看您的数据,似乎给定的部分可能与许多文章相关,因此从TMSectionTMArticle添加了很多关系。

数据中只有与一篇文章相关的期刊;如果普遍适用,那么您可以从TMJournalTMArticle添加一对一的关系。

然后使用以下谓词获取TMJournals:

[journalFR setPredicate:[NSPredicate predicateWithFormat:@"ANY article.sections == %@", self.selectedSectionManagedObjectID];

不幸的是,FRC仅会观察到 Journal对象的更改,因此您将需要专门处理对Articles或所选 Section的更改。

关于ios - 基于一对多关系的Coredata NSFetchedResultsController谓词(外部),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45743711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com