Objective c xcode崩溃后,一些按钮要么标题为空,要么部分被截断
这似乎是一个部分的复述,但他们的问题没有得到回答 请温柔点,我对这个很陌生 根据斯坦福德系列讲座,我已经实现了一个基于堆栈的计算器程序,但是我的一些按钮在模拟器中显示为空或半截断。每次我运行sim卡时,都会使用相同的按钮,但如果我移动sim卡周围的任何按钮,会改变哪些按钮会受到影响。通常是最底层的 这里的第一个示例:-查看底部一行按钮如何无法正确显示?如果我把其中任何一个按钮做得更高,它会显示出来,没有标题,但所有其他四个按钮都会正确显示 我想它可能离底部太近了,或者那些按钮坏了,或者类似的。因此,我删除了整个底部行,将所有内容缩小,然后重新创建了这些按钮,现在我得到了四个标题为空的按钮和两个被截断的按钮: 请注意,所有按钮仍按预期工作,只是显示不正确 我做错什么了吗?谢谢你的建议 编辑:来自控制器的完整代码:Objective c xcode崩溃后,一些按钮要么标题为空,要么部分被截断,objective-c,ios,xcode,Objective C,Ios,Xcode,这似乎是一个部分的复述,但他们的问题没有得到回答 请温柔点,我对这个很陌生 根据斯坦福德系列讲座,我已经实现了一个基于堆栈的计算器程序,但是我的一些按钮在模拟器中显示为空或半截断。每次我运行sim卡时,都会使用相同的按钮,但如果我移动sim卡周围的任何按钮,会改变哪些按钮会受到影响。通常是最底层的 这里的第一个示例:-查看底部一行按钮如何无法正确显示?如果我把其中任何一个按钮做得更高,它会显示出来,没有标题,但所有其他四个按钮都会正确显示 我想它可能离底部太近了,或者那些按钮坏了,或者类似的。因
#import "CalculatorViewController.h"
#import "CalculatorBrain.h"
@interface CalculatorViewController()
@property (nonatomic) BOOL userIsInTheMiddleOfEnteringANumber;
@property (nonatomic, strong) CalculatorBrain *brain;
- (void)updateStackDisplay:(NSString *)value;
@end
@implementation CalculatorViewController
@synthesize display = _display;
@synthesize stackDisplay = _stackDisplay;
@synthesize userIsInTheMiddleOfEnteringANumber = _userIsInTheMiddleOfEnteringANumber;
@synthesize brain = _brain;
- (CalculatorBrain *)brain {
if (!_brain) _brain = [[CalculatorBrain alloc] init];
return _brain;
}
- (void)updateStackDisplay:(NSString *)value {
// if there's nothing sent so far, just initialise it
if (self.stackDisplay.text.length == 0) {
self.stackDisplay.text = value;
return;
}
// This part is a little confusing. Extra assignment asked for = to be added to the end of the stack label if an operation was pressed.
// Here I check for = at the end of the label and remove it so it's only displayed once. If "=" is being passed (done by the operation itself), it will be added back on right at the end of this function.
if ([self.stackDisplay.text rangeOfString:@"="].location == (self.stackDisplay.text.length - 1)) {
// .location starts at zero, .length doesn't.
self.stackDisplay.text = [self.stackDisplay.text substringToIndex:[self.stackDisplay.text length]-1];
}
// If we add a space after remove the = we'll end up with double space. Hence the else if, not if.
else if (!self.userIsInTheMiddleOfEnteringANumber) {
self.stackDisplay.text = [self.stackDisplay.text stringByAppendingString:@" "];
}
self.stackDisplay.text = [self.stackDisplay.text stringByAppendingString:value];
}
- (IBAction)digitPressed:(UIButton *)sender {
NSString *digit = sender.currentTitle;
if ([digit isEqualToString:@"."]) {
if ([self.display.text rangeOfString:@"."].location != NSNotFound) {
return;
}
else {
if (!self.userIsInTheMiddleOfEnteringANumber) digit = @"0.";
}
}
[self updateStackDisplay:digit];
if (self.userIsInTheMiddleOfEnteringANumber) {
self.display.text = [self.display.text stringByAppendingString:digit];
}
else {
self.display.text = digit;
self.userIsInTheMiddleOfEnteringANumber = YES;
}
}
- (IBAction)operationPressed:(UIButton *)sender {
if (self.userIsInTheMiddleOfEnteringANumber) [self enterPressed];
[self updateStackDisplay:sender.currentTitle];
[self updateStackDisplay:@"="];
double result = [self.brain performOperation:sender.currentTitle];
NSString *resultString = [NSString stringWithFormat:@"%g", result];
self.display.text = resultString;
}
- (IBAction)enterPressed {
if (self.userIsInTheMiddleOfEnteringANumber) {
self.userIsInTheMiddleOfEnteringANumber = NO;
}
[self.brain pushOperand:[self.display.text doubleValue]];
}
- (IBAction)clearPressed {
self.stackDisplay.text = @"";
[self.brain clearStack];
self.userIsInTheMiddleOfEnteringANumber = NO;
self.display.text = @"0";
}
@end
我得到了一个可能类似的错误,一些UIButton有空文本,尽管通过输出titleLabel.text得到了正确的文本值。我删除了按钮,并将它们以相同的方式添加到故事板中。然后它就工作了。在我看来,按钮的内部标签位置不正确。你是不是搞乱了
ui按钮。标签
?我不这么认为,我已经编辑了条目以包含完整的控制器代码(抱歉格式化)好的,我没有看到它。也许你可以?谢谢你,科达菲。今天我将提交一份bug报告。同时,你知道我如何纠正这一点吗?有人告诉我,删除nib并重新启动UI可以做到这一点,但这是故事板,我不知道它的等效性是什么。然后我被告知不要找它,因为它绝对不是腐败。所以我不知道该去哪里找。这是从XCode崩溃后开始的?(你似乎只在标题中这么说。)