【问题标题】:Subtotal at cellForRowAtIndexPathcellForRowAtIndexPath 处的小计
【发布时间】:2012-01-27 18:14:55
【问题描述】:

我有两个实体,日记帐和帐户。这种关系是一对多的:Journal 只有一个 Account。 Account 有很多期刊。我想根据其日记显示每个帐户的总数,但我不知道如何。目前我为每个帐户获得的总数是相同的:

在我的 UITableView (Accounts.m) 中,我有:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    
    static NSString *CellIdentifier = @"Cell";
    XbAccountsN *cell = (XbAccountsN *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    if (cell == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"XbAccountsN" owner:self options:nil];
        cell = xbAccountsN;
        self.xbAccountsN = nil;
        GMAccount *awCuentasy = (GMAccount *)[self.fetchedResultsController objectAtIndexPath:indexPath];
        cell.cnAlias.text = awCuentasy.cnAlias;
        NSDecimalNumber *saldoAc = [NSDecimalNumber decimalNumberWithString:@"0.0"];
        for (NSManagedObject *object in [self.fetchedResultsController fetchedObjects]) {
            NSLog( @"Looping");
            NSDecimalNumber *objectExpenseNumber = [object valueForKeyPath:@"journals.@sum.pzAmount01"];
            balanceC = [balanceC decimalNumberByAdding:objectExpenseNumber];
        }
        NSNumberFormatter* bf = [[NSNumberFormatter alloc] init];    
        [bf setNumberStyle:NSNumberFormatterCurrencyStyle];
        cell.cnSaldo.text = [bf stringFromNumber: balanceC];
        [bf release];

即使我只有两个帐户,以及与每个帐户相关的几本日记帐,我每个帐户的金额都相同。如何为每个帐户提供正确的余额?请你帮助我好吗?。提前致谢。

【问题讨论】:

  • 请提供您所有的方法代码。我猜你是在 if (cell==nil) 块中设置你的变量值。也许吧。
  • 文森特,感谢您的宝贵时间。我把整个方法的代码。我是 xcode 的新手,如果您需要其他内容,请告诉我。
  • 这个逻辑首先属于你的模型。为什么每次表格视图请求单元格时都需要重新计算?
  • 马克,我没听懂你(抱歉,我是移动 IT/BT 的财务人员)。我不太习惯所有术语。让我澄清一下。用户从 UITableView (Accounts) 中选择一个帐户,然后,他创建一个日志(通过导航栏中的一个按钮)。输入日记帐后,他返回第一个表(帐户)。预计每个帐户的余额都会更新。我的理解是 UITableView 通过它的委托运行这种更新。
  • 感谢您的反思。消除“for”语句是一个很好的提示。

标签: iphone ios uitableview core-data


【解决方案1】:

好的。似乎您正在 if (cell == nil) 块中设置您的单元格标签。这是不正确的。请注意,在 tableView 中,单元格被回收,当创建足够数量的单元格时,不再调用该块,因为旧单元格在回收队列中可用。行。下面是正确的方法。 (检查语法,我写在这里)。

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

    XbAccountsN *cell = (XbAccountsN *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;

    if (cell == nil) {
        // Init new cell from nib archive (assuming the cell is the top most object in your xib)
        cell = (UITableviewCell*)[[[NSBundle mainBundle] loadNibNamed:@"XbAccountsN" owner: nil options:nil] objectAtIndex: 0];
    }

// Calculate your sum for the given awCuentasy
    GMAccount *awCuentasy = (GMAccount *)[self.fetchedResultsController objectAtIndexPath:indexPath];

    cell.cnAlias.text= awCuentasy.cnAlias;
    NSDecimalNumber *saldoAc = [NSDecimalNumber decimalNumberWithString:@"0.0"];
    for (NSManagedObject *object in [self.fetchedResultsController fetchedObjects]) {
            NSLog( @"Looping");
            NSDecimalNumber *objectExpenseNumber = [object valueForKeyPath:@"journals.@sum.pzAmount01"];
            balanceC = [balanceC decimalNumberByAdding:objectExpenseNumber];}
    NSNumberFormatter* bf = [[NSNumberFormatter alloc] init];    
        [bf setNumberStyle:NSNumberFormatterCurrencyStyle];
        cell.cnSaldo.text= [bf stringFromNumber: balanceC];
        [bf release];
}

return cell;

}

【讨论】:

  • 我在 cell = (UITableviewCell*)[[[NSBundle mainBundle] loadNibNamed:@"XbAccountsN" owner: nil options:nil] objectAtIndex: 0] 处出错; “从 UITableViewCell* 分配给 XbAccountsN 的指针类型不兼容。我错过了什么吗?
  • 好的。我假设您的 xib 仅包含一个 UITableViewCell。如果不是这种情况,请在单独的 xib 中提取您的单元格定义作为唯一对象并调用 [[[NSBundle mainBundle] loadNibNamed:@"xibOfMyCell" owner: nil options:nil] objectAtIndex: 0] 根据西布。
  • 你是对的。我只有一个带有四个 UILabel 的 UITableviewcell。一个是余额,其余的供参考(账户描述等)
  • 你能不能插入一个日志 NSLog(@"奇怪的对象是:%@, "[[[NSBundle mainBundle] loadNibNamed:@"yourCellXib" owner: nil options:nil] objectAtIndex: 0]);在你的 cell = ... 之前查看返回的对象。
  • 我按照您的指示放置了 NSLOG,但应用程序停在该行并且无法继续;但是我从调试器窗口中获得了以下信息: *** 由于未捕获的异常 'NSUnknownKeyException' 导致应用程序终止,原因:'[ setValue:forUndefinedKey:]:此类不符合键值编码xbAccountsN.'
猜你喜欢
  • 1970-01-01
  • 2012-05-15
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多