我在UITableViewController中定义了一个.h,如下所示:
@interface PartsSearchViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate> {
NSMutableArray *parts;
NSManagedObjectContext *managedObjectContext;
Metadata *metadata;
}.m是这样的:
@interface PartsSearchViewController () <NSFetchedResultsControllerDelegate, UISearchDisplayDelegate, UISearchBarDelegate>当项被选中时,它将w/standard推入一个详细视图:
@interface PartSearchDetailViewController : UIViewController我想让这个应用程序做的大部分工作看起来都很有效。在详细视图中有几个开关+字段,当更改时,这些字段会写入核心数据。如果用户在detail视图中进行更改,则返回到表视图(通过按< Search),相应单元格中对象的更改将按照预期的呈现,但只有在没有实现搜索的情况下才能这样做。但是,如果在表中实现了搜索,则在用户“滚动”并迫使受影响的单元格在筛选的集合中重新绘制之后,才会显示表中已过滤的对象集上的更改。
我已经证实,对对象数据的更改肯定是在Core数据中进行的。(否则,“滚动”位也不会更正单元格内容。)
我还证实,在任何情况下(搜索或不执行搜索),都调用了我的viewWillAppear:
- (void)viewWillAppear:(BOOL)animated
{
CoreDataController *cdc = [[CoreDataController alloc] init];
PartsPlant *thisPartsPlant = [cdc getLoadedPartsPlant];
// A "part" is the object that's displayed in each cell.
// "parts" is NSMutableArray of "part" objects.
self.parts = thisPartsPlant.parts;
UITableView *tv = (UITableView *)self.view;
[tv reloadData];
}当我逐步更新单元格时,我可以看到正在传递正确的数据来呈现单元格,但该单元格从不呈现。
我怀疑我看不到这个问题,因为我不完全理解UISearchDisplayController的东西是怎么回事。我对UseYourLoaf中的一个示例进行了建模,该示例在实现搜索时用过滤的结果填充NSArray。我的猜测是在某种程度上重新加载,我需要强制在这个集合上重登,而不是fetchedResultsController的内容。
下面是UISearchDisplayController在对表视图应用搜索时调用的内容:
- (void)searchForText:(NSString *)searchText scope:(PartsSearchScope)scopeOption
{
if (self.managedObjectContext)
{
NSString *predicateFormat = @"%K CONTAINS[cd] %@";
NSString *searchAttribute = @"partName";
if (scopeOption == searchScopePartNumber)
{
searchAttribute = @"partNumber";
}
NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateFormat, searchAttribute, searchText];
[self.searchFetchRequest setPredicate:predicate];
NSError *error = nil;
self.filteredList = [self.managedObjectContext executeFetchRequest:self.searchFetchRequest error:&error];
isFilterApplied = YES;
}
}然后,如果是self.SearchDisplayController.isActive,表视图通常用于self.fetchedResultsController的任何地方,则为self.filteredList。
抱歉,我是个C/iOS新手。任何帮助都是值得感激的。我可以提供更多的代码-只是不确定什么是相关的。
发布于 2013-12-20 23:43:30
根据我的经验,最好有两个获取的结果控制器,一个用于主数据,一个用于过滤。然后,如果您处于搜索模式,则可以在表数据源方法中检查,并从适当的获取结果控制器返回值。当搜索显示控制器委托方法调用开始搜索时,更改搜索获取结果控制器的谓词,执行提取和重新加载搜索表视图。你应该看到正确的结果。
https://stackoverflow.com/questions/20713599
复制相似问题