1

我有一个用户输入金额的视图。使用 NSUserDefaults,这个数量被转移到下一个视图,我希望用它进行数学计算。在下一个视图中,我有一个可变数组,用于将数据添加到表中。我想要的是:

视图 2 中的标签 = NSUserDefaults -(所有数组对象加在一起)

我想出了如何将数组对象添加在一起:NSNumber *sum = [transactions valueForKeyPath:@"@sum.self"];.

我试着做数学,但没有运气:self.amountLeftInBudget.text = [[[NSUserDefaults standardUserDefaults] objectForKey:@"AmountToSpend"] - sum];。我收到了这个错误:指向接口“id”的指针上的算术,这对于这个架构和平台来说不是一个恒定的大小。

有人有想法么?谢谢。

编辑:我的代码(使用警报视图)

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    //Only do the following actions if the user hit the done button
    if (buttonIndex == 1)
    {
        NSString *amountSpentTextField = [alertView textFieldAtIndex:0].text;

        if (!transactions)
        {
            transactions = [[NSMutableArray alloc]init];
        }

        [transactions insertObject:amountSpentTextField atIndex:0];

        NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];

        [self.mytableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

        //Add all the objects in the transactions array
        NSDecimalNumber *sum = [transactions valueForKeyPath:@"@sum.self"];

        //Get the user defaults from the amountToSpend field
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        NSDecimalNumber *amountToSpend = [defaults objectForKey:@"AmountToSpend"];

        // Set the amountLeftInBudget label THE PROBLEM! the subtracting does not work
        [self.amountLeftInBudget setText:[amountToSpend decimalNumberBySubtracting:sum]];

        //Set the amountSpent label
        [self.amountSpent setText:[sum stringValue]];
    }
}

试图减去两个字符串的问题。

4

2 回答 2

1

检查您的表情,在您的左侧-有:

[[NSUserDefaults standardUserDefaults] objectForKey:@"AmountToSpend"]

该表达式的价值是什么?它是对对象的一些引用。现在 rhs 是:

sum

并且该表达式的是对 a 的一些引用NSNumber。那么是什么value

<some reference to an object> - <some reference to an `NSNumber`>

您要求两个引用之间的差异,因此出现错误:Arithmetic on pointer to interface 'id',这对于该架构和平台来说不是一个恒定的大小。

您需要获取您的对象表示的数值,对它们进行算术运算,然后将数值结果转换为字符串表示形式以将其分配给您的text属性。

NSNumber具有多种获取对象所代表数值的方法;例如doubleValue,intValue等; 您需要根据自己的需要选择合适的。

HTH。

于 2013-07-28T20:51:02.547 回答
0

当你在 UILabel 上设置文本时,你必须给它一个 NSString。因此,您标记为问题的行将不起作用...

// Set the amountLeftInBudget label THE PROBLEM! the subtracting does not work
[self.amountLeftInBudget setText:[amountToSpend decimalNumberBySubtracting:sum]];

...因为你给 UILabel 一个 NSDecimalNumber。首先将 NSDecimalNumber 转换为字符串:

[self.amountLeftInBudget setText:[[amountToSpend decimalNumberBySubtracting:sum] stringValue]];
于 2013-07-31T02:17:14.437 回答