gpt4 book ai didi

ios - CoreData 查询返回零最初基于子对象 - 但退出后所有数据都存在

转载 作者:行者123 更新时间:2023-11-29 12:51:53 25 4
gpt4 key购买 nike

我正在使用 CoreData,我有一个名为 FlightRecording 的实体,该实体包含一组消息 AhrsMesages。我有一个奇怪的行为,我做了一个录音,然后一旦我保存了录音,我加载了一个过去录音的表格,它应该显示每个录音的消息数量。然而,正在发生的事情是它显示 0 条消息。如果我退出应用程序并重新启动它并再次进入我的记录列表菜单,它将正确显示正确数量的子实体。

我在 PreviousFlightVC.m 的 ViewDidLoad 中使用以下代码来加载我的航类:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"FlightRecording"];

NSSortDescriptor *originSort =
[[NSSortDescriptor alloc] initWithKey:@"originAirport" ascending:YES];

NSSortDescriptor *destinationSort =
[[NSSortDescriptor alloc] initWithKey:@"destinationAirport" ascending:YES];

NSSortDescriptor *dateSort =
[[NSSortDescriptor alloc] initWithKey:@"recordingStart" ascending:YES];


fetchRequest.sortDescriptors = @[originSort, destinationSort, dateSort];
[fetchRequest setIncludesSubentities:YES];

self.frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[self managedObjectContext] sectionNameKeyPath:nil cacheName:nil];

self.frc.delegate = self;
NSError *fetchingError = nil;
if ([self.frc performFetch:&fetchingError]) {
NSLog(@"Success Fetch");
} else {
NSLog(@"Fetch Error");
}

对于每个单元格,我都这样生成计数:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

RecordingRowCell *cell = nil;

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

/* - IPAD Version */
cell = [tableView dequeueReusableCellWithIdentifier:@"RecordingRowCell"];
} else {

/* Iphone table Cells */
cell = [tableView dequeueReusableCellWithIdentifier:@"iphoneFlightCell"];
}

FlightRecording *rec = [[[self frc] fetchedObjects] objectAtIndex:[indexPath row]];

// Count the records
int recordCount = [rec.ahrsMessages count];
NSLog(@"%d", recordCount);

// ...

有人知道我为什么会看到这种行为吗?我能否以某种方式让“数据”保持打开状态以供写入?任何建议都会很棒。这是一个小烦恼,但我仍然无法弄清楚为什么会这样。

这是我的初始表(退出前) - 注意 msgCount = 0 Before Case

在我退出应用程序并重新启动后,这里是我的 table - 注意 msgCount = 6 After Case

最佳答案

NSFetchedResultsController 不会跟踪相关对象到它正在获取的对象(在关系中)的变化。

在您的情况下,ahrsMessages 集的添加不会反射(reflect)在当前获取的对象中。

无论如何,您在 cellForRow... 中获取计数在性能方面非常昂贵。
最好将计数存储在 FlightRecording 对象本身中。
每次您请求对象的计数时,它都需要解决对多关系(去商店)。

每次向录音添加一条消息时,都会增加相关录音对象中的录音计数(CoreData 无论如何都会出错)。
这也会使您的 FRC 听到更改并更新 View 。

关于ios - CoreData 查询返回零最初基于子对象 - 但退出后所有数据都存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22260368/

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