【发布时间】:2026-01-29 22:40:01
【问题描述】:
一个简单的问题,希望如此。为什么 lostWagesLabel 和 totalNeedLabel 得到 0 - 以下代码中计算的两个值?
编辑:原始问题完全替换为以下代码 - 根据目前收到的建议进行了更新:
三个值通过一个转场从父场景传递到该场景。当在此场景中显示为文本值时,所有三个值都会正确显示。但是当我运行 NSLog 时,只有一个值(周)正确显示 - 这意味着其他两个值将作为 0 进入计算。
以下是父场景中的声明:
IBOutlet UISlider *earningsSlider;
IBOutlet UILabel *earningsLabel;
IBOutlet UISlider *disabledSlider;
IBOutlet UILabel *disabledLabel;
IBOutlet UISlider *expensesSlider;
IBOutlet UILabel *expensesLabel;
下面是一个实现示例:
- (IBAction)earningsSlide:(id)sender {
NSNumberFormatter *commas = [NSNumberFormatter new];
commas.numberStyle = NSNumberFormatterDecimalStyle;
int earningsValue = (int)(earningsSlider.value / 1000.0);
[earningsSlider setValue:earningsValue * 1000.0];
earningsLabel.text = [NSString stringWithFormat:@"$%@",
[commas stringFromNumber:[NSNumber numberWithFloat:earningsValue * 1000]]];
}
这里是所有东西都通过segue的地方:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"DisabilitySegue"]) {
DisabilityViewController *destViewController = segue.destinationViewController;
destViewController.earningsNumber = self->earningsLabel.text;
destViewController.expensesNumber = self->expensesLabel.text;
destViewController.disabledNumber = self->disabledLabel.text;
}
}
以下是新场景中的声明:
@property (nonatomic, strong) IBOutlet UILabel *earningsLabel;
@property (nonatomic, strong) NSString *earningsNumber;
@property (nonatomic, strong) IBOutlet UILabel *expensesLabel;
@property (nonatomic, strong) NSString *expensesNumber;
@property (nonatomic, strong) IBOutlet UILabel *disabledLabel;
@property (nonatomic, strong) NSString *disabledNumber;
@property (nonatomic, strong) IBOutlet UILabel *message;
@property (nonatomic, strong) NSString *lostWages;
@property (nonatomic, strong) IBOutlet UILabel *lostWagesLabel;
@property (nonatomic, strong) NSString *totalNeed;
@property (nonatomic, strong) IBOutlet UILabel *totalNeedLabel;
这是当前状态下的实现:
- (void)viewDidLoad
{
NSNumberFormatter *commas = [NSNumberFormatter new];
commas.numberStyle = NSNumberFormatterDecimalStyle;
earningsLabel.text = earningsNumber;
expensesLabel.text = expensesNumber;
disabledLabel.text = disabledNumber;
int earn = [earningsNumber intValue];
int expense = [expensesNumber intValue];
int weeks = [disabledNumber intValue];
NSLog(@"%d %d %d",earn,expense,weeks);
//print values to console
int lost = (int)(earn / 52 * weeks);
int need = (int)(expense * 12 / 52 * weeks);
NSLog(@"%d %d",lost,need);
//print values to console
lostWages = [NSString stringWithFormat:@"$%@",
[commas stringFromNumber:[NSNumber numberWithInteger:lost]]];
totalNeed = [NSString stringWithFormat:@"$%@",
[commas stringFromNumber:[NSNumber numberWithInteger:need]]];
lostWagesLabel.text = lostWages;
totalNeedLabel.text = totalNeed;
[super viewDidLoad];
}
当我为earnings、expenses 和 disabled 使用尽可能少的 1000、100 和 1 运行 NSLog 时,它看起来像这样(周)在父场景中:
2012-08-17 09:01:38.277 MyApp[8117:15203] 0 0 1
2012-08-17 09:01:38.279 MyApp[8117:15203] 0 0
我也在尝试更改通过 segue 发送的内容的格式,并将其作为父场景中的声明:
@interface IncomeProtectionViewController : UIViewController {
IBOutlet UISlider *earningsSlider;
IBOutlet UISlider *expensesSlider;
IBOutlet UISlider *disabledSlider;
IBOutlet UILabel *earningsLabel;
IBOutlet UILabel *expensesLabel;
IBOutlet UILabel *disabledLabel;
NSNumber *earningsNumber;
NSNumber *expensesNumber;
NSNumber *disabledNumber;
}
这在实现中:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"DisabilitySegue"]) {
DisabilityViewController *destViewController = segue.destinationViewController;
destViewController.earningsNumber = self->earningsNumber;
destViewController.expensesNumber = self->expensesNumber;
destViewController.disabledNumber = self->disabledNumber;
}
}
但是我在目标场景中收到了不兼容警告。
【问题讨论】:
-
你调试了吗?这些数字是否被正确拉回?您是否从中获得了适当的浮点值?
-
您能否提供一些可能在收入编号、费用编号和禁用编号中找到的示例值?
-
NSLog 记录这些变量的值并查看它们是什么。附带说明一下,如果您投射到
int的值小于 0,它们将被截断为 0。 -
应用程序编译没有错误。计算出的数字和其他数字都显示为正确格式 - 除了计算出的数字显示为 0 美元。可以为 EarningNumber 选择的值范围为 0 到 150,000,增量为 1,000;对于从 0 到 12,000 到 1,000 的费用数;并且对于 disabledNumber 从 0 到 52 的整数。我对 Xcode 还是很陌生。我还没有完成 NSLog。我会看看我是否能弄清楚如何。谢谢大家。
-
为了节省时间 - 如果前 3 个值是 100,000、5,000 和 10;那么 2 个计算值应该是 19,230 和 11,538。
标签: objective-c xcode nsstring segue