我有一个属性“term”,它是我的核心数据“Event”中的NSString。 加载表视图时,我希望将“name”的所有值加载到数组中。
我使用了代码
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
Event *event = nil;
event = [fetchedResultsController objectAtIndexPath:indexPath];
if(searching){
cell.textLabel.text = [copyListOfItems objectAtIndex:indexPath.row];
}else{
if(event.term){
[listOfItems addObject:event.term];
}
cell.textLabel.text = event.term;
cell.detailTextLabel.text = event.definition;
}
}
问题是所有术语都没有加载到NSMutableArray listOfItems。当表格单元格滚动到底部时加载它。
如何将“term”的所有内容从核心数据加载到数组listOfItems。
非常感谢任何帮助。
答案 0 :(得分:2)
您很可能看错了核心数据。核心数据 不是 数据库。它是一个碰巧持久存储到数据库的对象图。话虽如此,您的问题最好被问为“我如何加载实体'事件'的所有实例并访问其术语属性”。
为此,您希望针对没有谓词的“事件”实体构建和执行NSFetchRequest
。
NSManagedObjectContext *moc = ...;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Event" inManagedObjectContext:moc]];
NSError *error = nil;
NSArray *events = [moc executeFetchRequest:request error:&error];
NSAssert2(events != nil && error == nil, @"Error fetching events: %@\n%@", [error localizedDescription], [error userInfo]);
然后,您可以使用'KVC'来检索name属性的数组:
NSArray *namesArray = [events valueForKey:@"name"];
这将导致数组只填充该字符串。
然而,更好的问题是,如果要在表格中显示所有内容,为什么要使用数组? NSFetchedResultsController
已经为您检索了所有“事件”实体;它只是绑定到表的显示。你的目标是什么?
非常感谢Marcus先生的详细答案......我的目标是使用搜索栏从核心数据中搜索特定的“术语”。有没有更好的方法呢?
是的,并且有很多解决方案。您可以使用其NSFetchedResultsController
属性访问现有-fetchedObjects
的所有结果。从那里,您可以使用NSPredicate
对该数组应用-filteredArrayUsingPredicate:
来获取已过滤的数组,然后您可以在搜索结果中使用该数组。
如果你在搜索核心数据的SO和UISearchDisplayController
,我怀疑你会发现很多结果和建议。