gpt4 book ai didi

ios - 关系故障(核心数据)

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

我是核心数据新手,需要帮助解决以下问题:

我有两个实体:“Talk”和“Speaker”。他们有一对多的关系。

Talk - 目的地:Speaker,反向:talk说话者 - 目的地:说话,反向:说话者

在两个实体上检查“多对多关系”字段。

我有一个 TableView Controller 来列出所有可用的演讲。我就是这样做的:

- (NSFetchedResultsController *)fetchedResultsController
{
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Talk" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:@"date" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
[fetchRequest setFetchBatchSize:20];

NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil
cacheName:@"Root"];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;

return _fetchedResultsController;
}

当我单击一个单元格时,我想加载另一个 View Controller ,仅显示所选演讲的详细信息。

这就是我正在做的事情:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
TalksDetailsViewController *talksDetails = [[TalksDetailsViewController alloc] initWithTalksInfo:[_fetchedResultsController objectAtIndexPath:indexPath]];
[self.navigationController pushViewController:talksDetails animated:YES];
}

问题是:我在 TalksDetailsViewController 上看不到扬声器。这是发送到 TalksDetailsViewController 的信息:

Info: <Talk: 0x6e66920> (entity: Talk; id: 0x6e66880 <x-coredata://4063FE84-E6DB-4588-8133-9A55B512D6C8/Talk/p2> ; data: {
date = "2012-08-31 03:00:00 +0000";
id = 7;
speaker = "<relationship fault: 0x6e994e0 'speaker'>";
"start_time" = "17:14:55";
})

我尝试了以下代码,但没有成功:

for (Speaker *speakerInfo in self.talkInfo.speaker) {
NSLog(@"speaker info: %@", speakerInfo);
}

它永远不会进入 for。

如果我尝试记录 self.talkInfo.speaker 我会得到类似的信息:

Relationship 'speaker' fault on managed object (0x7a76c30) <Talk: 0x7a76c30> (entity: Talk; id: 0x7a76b90 <x-coredata://4063FE84-E6DB-4588-8133-9A55B512D6C8/Talk/p2> ; data: {
date = "2012-08-31 03:00:00 +0000";
id = 7;
speaker = "<relationship fault: 0x6bc5990 'speaker'>";
"start_time" = "17:14:55";
})

我看到了一些类似的问题,但无法解决我的问题。

有什么建议吗?

最佳答案

首先使用 SQLite 浏览器检查对象 ( here if you dont have one )。并确保数据存储在核心数据中。访问模拟器文件 ~/Library/Application\ Support/iPhone\ Simulator/XX/Applications/XXXXXXXXXXX/Documents/XXXX.sqlite .确保ZTALKS 有一个 ZSPEAKER及其值,这应该对应于 Z_PK ZSPEAKER 中的值表格。如果确实如此,则关系已连接。

您的模型应如下所示:

enter image description here

当你有一个像这样的 Talk 对象时:

 Talk *talk = [**YourManagedObjectContext**  executeFetchRequest:fetchRequest error:&error];

您应该能够像这样捕获它的扬声器:

Speaker *speaker = talk.speaker;

我知道这与您的设置略有不同,但希望这会有所帮助。

关于ios - 关系故障(核心数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12429072/

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