CoreDataTableViewConView.troller不滚动

时间:2012-07-21 20:43:12

标签: objective-c uitableview

我花了几周的时间试图在我的桌子上找到各个部分和行,并最终做到了! 接下来我注意到即使我有足够的数据要查看,我也无法向下滚动屏幕上显示的内容。此外,滚动条似乎比平常更胖,右上角显示数字2。

不确定我做错了什么。有人能引导我朝正确的方向推动我吗? 我无法捕捉到胖卷轴,但它肯定比它应该更宽。

- (void)setupFetchedResultsController  {

    NSString *entityName = @"Regster";

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:entityName];


    request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"addDate" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]];

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Regster" inManagedObjectContext:self.managedObjectContext];

    [request setEntity:entity];
    [request setResultType:NSDictionaryResultType]; 
    [request setReturnsDistinctResults:YES];
    //[request setFetchBatchSize:2];

    self.fetchedResultsController.delegate = nil;

    [request setPropertiesToFetch:[NSArray arrayWithObjects:@"addDate", @"regType", nil]];


    NSString *query = self.selectedAccounts.name;
    request.predicate = [NSPredicate predicateWithFormat:@"inAccounts.name CONTAINS[cd] %@", query];        


    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"addDate" cacheName:nil];

    [self performFetch];  

    NSError *error = nil;
    NSUInteger count = [_managedObjectContext countForFetchRequest:request error:&error]; 

}  


- (void)viewWillAppear:(BOOL)animated  {
    [super viewWillAppear:animated];
    [self setupFetchedResultsController];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

    return [[self.fetchedResultsController sections] count];

} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    id sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
    return [sectionInfo numberOfObjects];

} 

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section  {

    id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
    return [sectionInfo name];

} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *CellIdentifier = @"Account Register";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)  {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
    }

    [self.tableView setScrollEnabled:YES];    

    NSDictionary *regtype = [self.fetchedResultsController objectAtIndexPath:indexPath];

    cell.textLabel.text = [regtype objectForKey:@"regType"];

    return cell;
}

enter image description here EDIT1:更改fetchedResultsController的sectionNameKeyPath的@“addDate”,导致删除日期和部分,留下一个部分,滚动工作正常。离开@“addDate”做了我想要的部分,但我不明白为什么它不会滚动那个2和一个“胖”滚动。

EDIT2:我发现了我的问题...我从其他教学课程中借用了代码来使我的CoreDataTableViewController正常工作并且它实现了sectionIndexTitlesForTableView。注释掉并且正在工作!

2 个答案:

答案 0 :(得分:0)

很难看不到您的代码或了解数据是什么。但我可以帮助一点。

角落里的那个2是你的表格视图的部分索引列(也可能是胖滚动条的意思)。你有两个部分都以数字2开头。如果部分标题是单词,你会看到一个按字母顺序排列的索引。

索引只显示1个值的事实可能意味着您的表视图不会显示您期望的完整数据集,只显示屏幕上的2个部分。

也许会显示一些代码?即使只是设置代码可能会有所帮助。通常,CoreDataTableViewController需要NSFetchedResultsController,标题键等。显示一些代码可能会提供更多线索。

答案 1 :(得分:0)

我发现了我的问题...我从另一个教学课程中借用了代码来使我的CoreDataTableViewController工作,并且它实现了sectionIndexTitlesForTableView。做了一些大规模的搜索,发现这在某个地方长大了。注释掉了sectionIndexTitlesForTableView方法,它工作得很好!