2011-09-30 34 views
2

我正在编程Objective-C 2.0书中的一个小数计算器应用程序。我为Lion使用XCode 4.1。我完全成功地在代码中没有输入任何错误。但是当我在应用程序运行时按下数字按钮时,标签不会输入任何文本。当我按一个数字键,就应该找到的UIButton发件人标签(我已拨出)将NSMutableString分配给UILabel文本

-(IBAction)clickDigit:(UIButton *)sender { 

int digit = sender.tag; 

[self processDigit:digit]; 
    } 

,它被发送到这个代码:

-(void)processDigit:(int)digit { 

currentNumber = currentNumber * 10 + digit; 

[displayString appendString:[NSString stringWithFormat:@"%i", digit]]; 
display.text = displayString; 

NSLog(@"Processed"); 

    } 

控制台可以打印处理。这表明该按钮是否正常工作,所以问题就出在这行代码:

[displayString appendString:[NSString stringWithFormat:@"%i", digit]]; 
display.text = displayString; 

显示器是一个UILabel,它是一个实例变量,但它不是一个IBOutlet,但被声明为一个IBOutlet在其属性。

@property (nonatomic, retain)IBOutlet UILabel *display; 

我已经使用连接到代码助理的东西连接.xib屏幕上的标签。我可以从字面上将它连接到声明。所以我把它连接到了财产。

现在,问题在于display是UILabel,它的text属性需要NSString而不是NSMutableString吗?但是一个NSString不能附加一个字符串和我需要为这个应用程序执行的其他许多方法。我该如何做这项工作?

+0

DisplayString是否已初始化?如果它是零,那么appendString选择器将不会执行任何操作。 – Circumflex

+0

尝试[NSString stringWithFormat:@“%@”,mutableString]将可变字符串转换为静态字符串。不知道这是否是你的问题。 –

+0

NSMutableString是NSString的一个子类,因此将标签的文本属性设置为该可变字符串是完全有效的。在附加数字以确保设置为预期值后,是否记录了displayString的值? –

回答

3

NSMutableStringNSString大多可以互换。即如果方法需要NSString,则可以将其传递给NSMutableString。然而,这不起作用,而且它们经常被复制并且不可变。即使您通过NSMutableStringUILabeltext属性,它也会始终返回NSString

我怀疑你在这里还有其他问题。也就是说,使用不可变字符串比可变字符串更容易。

您可以更改此代码:

[displayString appendString:[NSString stringWithFormat:@"%i", digit]]; 
display.text = displayString; 

这个代码:

display.text = [displayString stringByAppendingString:[NSString [email protected]"%i",digit]]; 

因为stringByAppendingString使得与接收器(displayString)的内容,通过了新的不可变的字符串对象和字符串一个参数([NSString stringWithFormat:@"%i",digit])。

我怀疑你的问题是displayStringnil。 添加一些NSLog的查找...

  1. -(IBAction)clickDigit:(UIButton *)sender添加NSLog(@"Sender is %@",sender)
  2. -(void)processDigit:(int)digit添加NSLog(@"Digit is %i and displayString is %@ and display is %@", digit, displayString, display);

这应该给你一个想法是什么的对象是零,或连接错误在Interface Builder。

+0

是的,我的显示字符串是(null) 我该如何解决这个问题? – user973985

+0

不要担心! 我认为我做了最糟糕的错误,不知道 – user973985

+0

不小心把viewDIdLoad代码放在viewDIdUnload – user973985

0

NSMutableStringNSString。更具体地说,它是一个子类。只分配它,它会工作。

1

我面临同样的问题,我发现我错过了功能“viewDidLoad中”这行代码在文件“Fraction_CalculatorViewController.m”

displayString =[NSMutableString stringWithCapacity:40]; 

这将解决问题的ISA。

相关问题