2012-01-28 2 views
2

거래가있는 UITableView가 채워져 있습니다 (이전에 Navbar의 버튼을 통해 저장 됨). 각 행에는 날짜, 설명, 사람, 가치 (입금 및 인출) 5 개의 UILabel이 있습니다. 표는 날짜순으로 정렬됩니다. 일일 잔액을 어떻게 얻을 수 있습니까? 저울은 첫 번째 입력에서 현재 행까지의 합계 (+ 및 -)입니다.UITableView에서 누적 합계 만들기

다음 코드 (JournalDetail.m)를 가지고,하지만 난 단지

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
static NSString *CellIdentifier = @"Cell"; 
GxPolizasL *cell = (GxPolizasL *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) { 
[[NSBundle mainBundle] loadNibNamed:@"GxPolizasL" owner:self options:nil]; 
cell = gxPolizasL; 
self.gxPolizasL = nil; 
GMDiario *gmDiarioy = (GMDiario *)[self.fetchedResultsController objectAtIndexPath:indexPath]; 
//Date value 
NSDateFormatter* df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"dd/MM/yy"]; 
cell.fechao.text = [df stringFromDate:gmDiarioy.pzFecha]; 
[df release]; 
//Description value 
cell.referencia.text=gmDiarioy.pzAlias; 
//Person value 
cell.item.text = gmDiarioy.persona.prAlias; 
//Transaction value 
NSNumberFormatter* vf = [[NSNumberFormatter alloc] init];  
[vf setNumberStyle:NSNumberFormatterCurrencyStyle]; 
cell.valuem.text= [vf stringFromNumber: gmDiarioy.pzMont01]; 
[vf release]; 
//This is where the balance value is intended to be created 
NSDecimalNumber *saldoAc = [NSDecimalNumber decimalNumberWithString:@"0.0"]; 
NSDecimalNumber *objectExpenseNumber = [gmDiarioy valueForKeyPath:@"pzMont01"]; 
saldoAc = [saldoAc decimalNumberByAdding:objectExpenseNumber]; 
NSLog(@"saldoAc: %@",saldoAc); 
NSNumberFormatter* af = [[NSNumberFormatter alloc] init]; 
[af setNumberStyle:NSNumberFormatterCurrencyStyle]; 
cell.valuea.text= [af stringFromNumber: saldoAc]; 
[af release]; 
} 
return cell;} 

당신이 날은 어느 파악하는 데 도움이 수 대신 누적 금액 (잔액)의 가치와 동일한 금액을 얻을 균형 값을 구현하는 올바른 방법? 미리 감사드립니다. 귀하의 도움을 크게 주시면 감사하겠습니다. 상기 데이터 원본 배열을 통해 루프를 원하는 전화를 시작하는 모든 값을 요약됩니다 때마다 cellForRowAtIndexPath: :

- (NSFetchedResultsController *)fetchedResultsController 
{ 
if (__fetchedResultsController != nil) { 
return __fetchedResultsController; 
} 
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease]; 

//Diario is an entity that keeps all transactions 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Diario" inManagedObjectContext:self.managedObjectContext]; 
[fetchRequest setEntity:entity]; 
[fetchRequest setFetchBatchSize:20];  

//This is to select only the journals for the current account (value passed at didSelectRowAtIndexPath from the previous UItableView 
NSString *filtro=gmCuenta.cnAlias; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"cuenta.cnAlias like %@", filtro]; 
NSLog(@"NSPredicate1 %@", gmDiario.cuenta); 
[fetchRequest setPredicate:predicate]; 
NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"pzFecha" ascending:YES] autorelease]; 
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 
NSFetchedResultsController *aFetchedResultsController = [[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil] autorelease]; 
aFetchedResultsController.delegate = self; 
self.fetchedResultsController = aFetchedResultsController; 
NSError *error = nil; 
if (![self.fetchedResultsController performFetch:&error]) { 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    abort();} 
return __fetchedResultsController; 
} 

답변

4

기본적 싶은 것은 이것이다 self.fetchedResultsController 코드입니다 배열의 시작 부분과 해당 셀의 행 번호 (즉, indexPath.row)와 같은 배열 항목으로 끝납니다. 그것은 당신에게 누적 합계 (균형)을 줄 것입니다.

NSDecimalNumber *saldoAc = [NSDecimalNumber decimalNumberWithString:@"0.0"]; 
for (int i=0; i <= indexPath.row; i++) { 
    NSIndexPath *indexPath = [NSIndexPath indexPathWithIndex:i]; 
    GMDiario *tempObj = (GMDiario *)[self.fetchedResultsController objectAtIndexPath:indexPath]; 
    NSDecimalNumber *objectExpenseNumber = [tempObj valueForKeyPath:@"pzMont01"]; 
    saldoAc = [saldoAc decimalNumberByAdding:objectExpenseNumber]; 
} 
NSNumberFormatter* af = [[NSNumberFormatter alloc] init]; 
[af setNumberStyle:NSNumberFormatterCurrencyStyle]; 
cell.valuea.text= [af stringFromNumber: saldoAc]; 
[af release]; 

또 다른 의견은 - 당신이 if (cell == nil) 블록을 종료 한 후에는 셀의 파단의 값을 설정해야합니다. 그렇지 않으면 tableView가 스크롤되기 시작할 때 문제가 발생합니다.

+0

jonkroll, 시간 내 주셔서 감사합니다. 귀하의 제안을 입력했지만 경고 메시지가 나타납니다 : 포인터 변환에 호환되지 않는 정수 'int'를 NSIndexPath 유형의 매개 변수로 보냅니다. 내가 뭔가 빠진거야? – Memo

+0

죄송합니다. 분명히'objectAtIndexPath :'는 NSIndexPath 객체를 인수로 필요로합니다. 위의 코드를 수정했습니다. 어떤 이유로 든 – jonkroll

+0

이 충돌합니다. GMDiario * tempObj = (GMDiario *) [self.fetchedResultsController objectAtIndexPath : indexPath]; 문제를 어떻게 파악할 수 있습니까? – Memo