【问题标题】:Can't do mathematical operations with int from NSUserDefaults无法使用 NSUserDefaults 中的 int 进行数学运算
【发布时间】:2012-02-26 13:21:47
【问题描述】:

我有整数数据,存储在 NSUserDefaults 中,还有我的代码:

- (IBAction)addButton:(id)sender {
      NSInteger oldValue = [[NSUserDefaults standardUserDefaults] integerForKey:@"myValue"];

    NSString *string1=[addTextField text];
    int add = [string1 floatValue];  
    int new = globalCalories;
    int old=oldValue;

    if(recomended.text==[NSString stringWithFormat:@"%i", oldValue]){
        **self.day = (int)roundf(old-add);
        dayLeft.text=[NSString stringWithFormat:@"%d", oldValue-add];
    }**

    else
    {
        self.day=(int)roundf(new-add);
        dayLeft.text=[NSString stringWithFormat:@"%d", day];
    }
}

我复制了所有按钮操作代码,以防万一,但我确实用粗体代码字符串标记,这似乎不起作用。因此,它假设对存储的数据(oldValue)进行数学运算,但是当我启动程序时,它实际上并没有,但不是有效值程序“认为”oldValue 是 0(而不是有效值)。

因此,当它包含例如数字 2000 时,我启动程序并在文本字段中输入 500,它假设为 1500 (2000-500),但它显​​示为 -500。

【问题讨论】:

标签: iphone objective-c xcode nsuserdefaults nsinteger


【解决方案1】:

您可以使用以下方法将Recommended.text 转换为整数:

int recommendedValue = [recommended.text intValue];

然后比较数字。

【讨论】:

    【解决方案2】:

    问题在于 == 比较的是 NSString 的地址而不是它们的值(请参阅许多 SO 问题)。要比较字符串,请使用isEqualToString: 方法。

    但是在这种情况下,比较数字会更好,即将recomended.text 转换为数字并在dayLeft 上使用intValue 方法。

    【讨论】:

    • 我想知道如何将 label.text 转换为该数字?请告诉我
    • recomended.text是怎么设置的,是什么类型的?
    • recomended.text= [NSString stringWithFormat:@"%i", globalCalories];
    • 为什么不将 globalCalories 存储在推荐的 int 中
    • 重要的是变量的类型而不是它的范围
    猜你喜欢
    • 2015-03-21
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 2011-04-06
    • 1970-01-01
    相关资源
    最近更新 更多