0

テーブルでセクションと行を機能させるために文字通り数週間を費やし、ついにそれを実行しました! 次に、表示するデータがたくさんあるにも関わらず、画面に最初に表示されたものを下にスクロールできないことに気付きました。また、スクロール バーが通常より太く、右上隅に数字の 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;
}

ここに画像の説明を入力 EDIT1: fetchedResultsController の sectionNameKeyPath の @"addDate" を変更すると、日付とセクションが削除され、1 つのセクションが残り、スクロールが正常に機能します。@"addDate" を残すと、セクションで必要なことが行われますが、その 2 と「太い」スクロールでスクロールしない理由がわかりません。

EDIT2:私は自分の問題を見つけました...別の教育コースからコードを借りて CoreDataTableViewController を機能させ、sectionIndexTitlesForTableView を実装していました。コメントアウトして動作中です!

4

2 に答える 2

0

コードを見たり、データが何であるかを理解したりすることは困難です。でも、少しは手伝うことができます。

隅にある 2 は、テーブル ビューのセクション インデックス列です (これは、太いスクロール バーの意味でもあります)。番号 2 で始まる 2 つのセクションがあります。セクションのタイトルが単語の場合は、アルファベット順のインデックスが表示されます。

ただし、インデックスが 1 つの値しか表示していないという事実は、テーブル ビューが期待する完全なデータ セットを表示せず、画面に表示されている 2 つのセクションのみを表示していることを意味する場合があります。

おそらくいくつかのコードを表示しますか?セットアップコードだけでも役立つ場合があります。通常、CoreDataTableViewController には、NSFetchedResultsController、タイトル キーなどが必要です。そのコードの一部を表示すると、より多くの手がかりが得られる場合があります。

于 2012-07-22T02:14:39.733 に答える
0

問題が見つかりました...別の教育コースからコードを借りて CoreDataTableViewController を機能させ、sectionIndexTitlesForTableView を実装していました。大規模な検索を行ったところ、これがどこかに持ち込まれていることがわかりました。sectionIndexTitlesForTableView メソッドをコメントアウトすると、完全に機能します。

于 2012-07-27T15:39:57.900 に答える