gpt4 book ai didi

objective-c - 核心数据中两个不同的获取请求

转载 作者:行者123 更新时间:2023-11-29 04:30:30 26 4
gpt4 key购买 nike

我注意到在一个完整的核心数据进程中有两个不同的获取请求。

获取请求 A:Context (MOC) 实例通过创建获取请求并执行它 (executeFetchRequest) 将数据从磁盘获取到内存。

获取请求 B:FRC 实例使用另一个获取请求进行初始化,将数据从内存(指定上下文)获取到内存,这是自动发生的,因此无需“执行”此获取。

Fetch 请求 A 和 Fetch 请求 B 之间的连接

1.A和B的上下文必须相同

2. fetch B 的结果是 fetch A 结果的子集

问题我想知道我的理解是否绝对正确。如有不准确的表述和误解,敬请指出。谢谢。

示例代码

获取A(显式执行):从磁盘到内存

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Photo"];   

request.predicate = [NSPredicate predicateWithFormat:@"unique = %@", [flickrInfo
objectForKey:FLICKR_PHOTO_ID]];

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES];

request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor];

NSError *error = nil;

// execute the fetch
NSArray *matches = [context executeFetchRequest:request error:&error];

获取B(自动):从内存到内存

- (void)setupFetchedResultsController 
{
NSFetchRequest *request =
[NSFetchRequest fetchRequestWithEntityName:@"Photo"];
request.sortDescriptors =
[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"title"
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)]];
request.predicate = [NSPredicate predicateWithFormat:@"whoTook.name = %@", self.photographer.name];

self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:self.photographer.managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
}

最佳答案

获取请求 A。正确。

获取请求 B。几乎正确。您不知道 FRC 从哪里获取数据,是在内存中还是必须从存储中检索。您不必关心,这就是 FRC 的美妙之处。

关系 1. 相同的上下文。错误的。上下文与关系无关。两个实体 A 和 B 必须位于相同的数据模型中,而不是上下文中。上下文主要用于获取和保存。

关系 2. 子集。错误的。如果您获取实体 A,则可以访问其关系,但您不知道在何时实际检索了多少数据(这称为故障)。核心数据将为您解决这个问题。由于关系可以以任何方式建立(一对多、多对多、一对一)并且可能为空,因此您关于子集的陈述不正确。例如:

// A --one-to-many--> B
NSSet *bSet = anAObject.bRelationship;

在这种情况下,该集合确实包含所有 B 实体的子集(如果还有其他实体),但您会发现这只是一个特殊情况。在上面的代码中,您还可以看到通过点表示法访问关系实体是多么方便。

关于objective-c - 核心数据中两个不同的获取请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11804378/

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