0

これが私の cellForRowAtIndexPath メソッドです。私のプロジェクトでARCを使用しています。

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

    static NSString* cellIdentifier = @"ActivityCell";



    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (!cell) {

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];

    }



    Activity* activityToShow = [self.allActivities objectAtIndex:indexPath.row];



    //Cell and cell text attributes

    cell.textLabel.text = [activityToShow name];


    //Slowing down the list scroll, I guess...

    LastWeekView* lastWeekView = [[LastWeekView alloc] initWithFrame:CGRectMake(10, 39, 120, 20)];

    [lastWeekView setActivity:activityToShow];

    lastWeekView.backgroundColor = [UIColor clearColor];

    [cell.contentView addSubview:lastWeekView];



     return cell;

}

LastWeelView の割り当てにより、スクロールが遅くなると思います。lastWeekView では、エンティティのリレーションシップを CoreData からフェッチし、それらの値に対して計算を実行し、drawRect メソッド内でいくつかの色を描画します。

LastWeekView の drawRect は次のとおりです。

- (void)drawRect:(CGRect)rect
{
    NSArray* activityChain = self.activity.computeChain; //fetches its relationships data


    for (id item in activityChain) {
        if (marking == [NSNull null]) 
        {
            [notmarkedColor set];
        }
        else if([(NSNumber*)marking boolValue] == YES)
        {
            [doneColor set];
        }
        else if([(NSNumber*)marking boolValue] == NO)
        {
            [notdoneColor set];
        }

        rectToFill = CGRectMake(x, y, 10, 10);
        CGContextFillEllipseInRect(context, rectToFill);

        x = x + dx;
    }
}

tableView のスクロールをスムーズにするにはどうすればよいですか? この lastWeekView を各セルの contentView に非同期に追加する必要がある場合、どうすればよいですか? 助けてください。

4

1 に答える 1

1

LastWeekViewセルの割り当てスコープに割り当てることをお勧めします。また、すべてのコア データ オブジェクトをフェッチしviewDidLoadて、incellForRowAtIndexPath:メソッドがストアからではなく配列から取得するようにします。次のようになります。

- (void)viewDidLoad
    ...
    _activities = [Activity fetchAllInContext:managedObjectContext];
    ...
}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCell];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
        LastWeekView* lastWeekView = [[LastWeekView alloc] initWithFrame:CGRectMake(10, 39, 120, 20)];

        lastWeekView.backgroundColor = [UIColor clearColor];

        [cell.contentView addSubview:lastWeekView];
    }

    Activity *activityToShow = [_activities objectAtIndex:[indexPath row]];
    LastWeekView *lastWeekView = (LastWeekView *)[[[cell contentView] subviews] lastObject];
    [lastWeekView setActivity:activityToShow];
    return cell;
}

UITableViewCell をサブクラス化して、contentView をあなたのものに置き換えて LastWeekView、アクティビティ プロパティにすばやくアクセスすることもできます。

于 2012-08-27T08:38:30.060 に答える