过滤NSFetchedResultsController数据的最佳做法是什么?每次搜索栏的文本发生变化时,我是否需要重新初始化它?
我正在使用UISearchDisplayControllers和我正在实施:
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString;
Run Code Online (Sandbox Code Playgroud)
谢谢.
我即将离开这里,在我的Core Data数据库中我有很多用户,我已经通过NSFetchedResultController将数据库连接到tableviewcontroller,当视图加载时,我看到所有用户,我可以通过storyboard segue执行推送到详细视图控制器...到目前为止,所以上帝,我的tableview包含一个带有图像视图的自定义单元格和2个uitextlabels,它们都分配了标签值.
现在,当我执行搜索时,我创建了一个带有谓词的新NSFetchedResultController,并执行performFetch ..然后我获取fetchedObjects属性并且它包含匹配的用户,因此搜索请求也像魅力一样...我的tableviews数据源我检查self.tableView == self.searchdispl.view以查看我应该从哪个控制器查询数据..在所有控制器委托中,我检查哪个控制器是活动的,所以我知道要重新加载哪个视图.如果我记录了很多数据,那么幕后操作就很好了,委托和数据源方法都使用了正确的视图和fetchcontroller.
在我的cellForRowAtIndexPath中,我可以注销我的user.name,这在搜索时也是正确的.
问题是顶部的UISearchDisplayController视图只有空单元格,除非我将UITableViewControllers动态原型单元格设置为basic,然后两个tableviews都包含带有用户名称的标签!来自单元格的segue仍然不起作用,但是单元格中有数据.
看起来UISearchDisplayControllers视图是一个通用视图,至少在segues和cell布局时...
我检查了从UISearchDisplayController到我的UITableViewController的所有连接,看起来都很好......
为什么SearchDisplayControllers视图不接受我的单元格布局和segue?
谢谢 :)
更新:刚刚弄清楚出了什么问题,但尚未找到解决方案.在我的cellForRowAtIndexPath中,当thr searchdisplayview在此方法中时,单元格始终配置为默认单元格.我是否真的需要在代码中创建我的单元格以使uisearchdisplay工作?为什么不能使用故事板中配置的单元格?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"PersonCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSLog(@"Default Cell");
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
NSFetchedResultsController *controller = tableView == self.tableView ? self.fetchedResultsController : self.fetchedResultsControllerForSearch;
Person *p;
p = [controller objectAtIndexPath:indexPath];
[(UILabel*) [cell viewWithTag:1] setText:p.name];
[(UILabel*) [cell viewWithTag:2] setText:@"Status"];
if(p.avatarImage){
UIImage *avatar = [[UIImage alloc] initWithData:p.avatarImage];
[(UIImageView …Run Code Online (Sandbox Code Playgroud) 重构为香草 UIViewController
而不是具有UITableView活性和非活性之间切换UISearchController,我重构到香草UIViewController与UISearchBar在顶部和一个UITableView直接在其下面.
我正在尝试做的是切换fetchedResultsController具有由searchBar中的文本设置的谓词和捕获所有内容的谓词.
我找到了这个答案,它描述了Objective-C中类似问题的解决方案,并作为我重构Swift项目的基础:
如何使用UISearchDisplayController/UISearchBar过滤NSFetchedResultsController(CoreData) /sf/answers/665902401/
我的问题:如何更新我的fetchedResultsController searchBar文本?
该tableView填入正确的,但我无法弄清楚如何更新fetchedResultsController我的searchPredicate这是我已经试过.
下面是我怎样,我宣布我NSPredicate和NSFetchedResultsController在类的顶部:
var searchPredicate = NSPredicate()
// Create fetchedResultsController to store search results
lazy var fetchedResultsController: NSFetchedResultsController = {
let fetchRequest = NSFetchRequest(entityName: "Song")
let sortDescriptor = NSSortDescriptor(key: "songDescription", ascending: true);
// ** THESE TWO LINES CAUSE A CRASH, BUT NO COMPILER ERRORS **
// let predicate = …Run Code Online (Sandbox Code Playgroud) core-data uitableview nspredicate nsfetchedresultscontroller swift
我在加载时显示带有搜索栏和范围栏按钮的UITableView.当用户点击示波器条按钮时,将显示键盘并且搜索栏将获得焦点(成为第一响应者).
是否可以允许使用示波器条按钮来过滤表项而不显示键盘?用户可以通过在搜索文本输入字段中专门点击来显示键盘.
core-data ×2
iphone ×2
objective-c ×2
uitableview ×2
ios ×1
nspredicate ×1
swift ×1
uisearchbar ×1