我有一个计算卡路里的应用程序。用户输入他们的卡路里(每个食物在TableView中变成一行。每个部分代表一天。
我有一个章节标题,可以添加当天的所有卡路里。
现在我有一年的投入,加载应用程序的性能很慢(大约需要5秒)。我用过仪器,负责的方法是titleForHeaderInSection。我发现的问题是当tableview加载时(不仅仅是显示的部分),每个部分都会调用此方法。
有没有解决这个问题?我很想每天显示总数。
答案 0 :(得分:0)
如果您对标题的计算有点“昂贵”,那么您需要一种方法来推迟计算。没有什么好方法可以知道何时调用import {Component, ViewEncapsulation} from '@angular/core';
import {DataService} from '../shared/services/DataService';
import {Widget} from '../core/widget/widget';
import {TablesBackgrid} from './tables-backgrid/tables-backgrid';
import {DataTableDirectives} from 'angular2-datatable/datatable';
import {SearchPipe} from './pipes/search-pipe';
declare var jQuery: any;
import {Router,ActivatedRoute} from '@angular/router';
import {IAccounts} from '../shared/interfaces/IAccounts';
import {Profile} from '../profile/profile';
import { ROUTER_DIRECTIVES } from '@angular/router';
const Agents = [];
@Component({
selector: '[account-list]',
template: require('./account-list.html'),
encapsulation: ViewEncapsulation.None,
directives: [Widget,TablesBackgrid, DataTableDirectives,ROUTER_DIRECTIVES],
styles: [require('./account-list.scss')],
pipes: [SearchPipe]
})
export class AccountList {
agents: any[];
router:Router;
constructor(ds:DataService) {
let test = ds.getAccounts().then(res => {
this.agents = res.agents;
});
}
loadProfile(id){
this.router.navigate(['/profile']);
}
ngOnInit(): void {
let searchInput = jQuery('#table-search-input, #search-countries');
searchInput
.focus((e) => {
jQuery(e.target).closest('.input-group').addClass('focus');
})
.focusout((e) => {
jQuery(e.target).closest('.input-group').removeClass('focus');
});
}
}
来真正显示标题以及何时调用它只是为了设置表格视图。
一种解决方案是将titleForHeaderInSection
替换为titleForHeaderInSection
和viewForHeaderInSection
。
诀窍是只在标题视图实际添加到表视图时设置标题视图的文本。这可以在自定义标题视图类的heightForHeaderInSection
方法中完成。如果superview为非nil,则视图将添加到其父视图中。您需要一种方法来使用该方法来实际计算标题的文本。
正如评论中所指出的,另一种可能的解决方案是仅计算每天的总数并存储该值。然后在表视图中加载数据时,您不需要进行任何计算。只需使用预定值。