gpt4 book ai didi

iphone - Core Data 对多关系获取数据

转载 作者:行者123 更新时间:2023-11-28 22:41:28 27 4
gpt4 key购买 nike

在我的代码中,我想创建带有列表部分的 tableView。我使用这样的方案:

enter image description here

我使用 NSFetchResultController,我是这样定义的:

- (NSFetchedResultsController *)fetchedResultsController {

if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Item" inManagedObjectContext:coreDataController.masterManagedObjectContext];
[fetchRequest setEntity:entity];

NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:@"addedAt" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];

[fetchRequest setFetchBatchSize:20];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"itemIsChecked = 1"];

[fetchRequest setPredicate:predicate];
[fetchRequest setResultType:NSDictionaryResultType];

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

return _fetchedResultsController;
}

现在在 cellForRowAtIndexPath 中:我想从我的 fetchResultController 中获取数据,所以我这样做了:

Item *item = [self.fetchedResultsController objectAtIndexPath:indexPath];

然后如果我想访问项目的字段之一(例如 itemText),它会崩溃:

NSLog(@"item itemtext = %@", item.itemText);

有错误:

-[NSKnownKeysDictionary1 itemText]: unrecognized selector sent to instance 0x1215fd90

我的代码哪里做错了?

最佳答案

你已经设置了

[fetchRequest setResultType:NSDictionaryResultType];

因此,获取的结果 Controller 返回 NSDictionary 对象,而不是 Item 对象。所以你的元素

Item *item = [self.fetchedResultsController objectAtIndexPath:indexPath];

是一个NSDictionary,而不是一个Item。由于字典没有 itemText 方法,因此 item.itemText 会崩溃。您可以使用

从字典中检索值
NSDictionary *item = [self.fetchedResultsController objectAtIndexPath:indexPath];
NSLog(@"item itemtext = %@", [item objectForKey:@"itemText"]);

但如果您没有特定原因将结果类型设置为 NSDictionaryResultType,您应该只删除该行。获取结果 Controller 的更改跟踪(即自动 TableView 更新)不适用于 resultType == NSDictionaryResultType

另请注意,如果您设置了 sectionNameKeyPath,则必须添加具有相同键路径“toList.listName”的排序描述符,并将其用作获取请求的第一个排序描述符。

关于iphone - Core Data 对多关系获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14423712/

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