将NSMutableString分配给UILabel文本

时间:2011-09-30 23:32:13

标签: objective-c xcode nsstring uilabel nsmutablestring

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

   -(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");

    }

控制台DOES打印已处理。表明此按钮正在运行,因此问题在于以下代码行:

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

display是UILabel,它是一个实例变量,但它不是IBOutlet,而是在其属性中声明为IBOutlet。

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

我已经使用与代码助手的连接在.xib屏幕上连接了标签。我可以直接将它连接到声明。所以我把它连接到了房产。

现在,问题在于display是一个UILabel,它的text属性需要NSString而不是NSMutableString吗?但是NSString不能附加字符串以及我需要它为这个应用程序做的许多其他方法。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:3)

NSMutableStringNSString大多可以互换。即如果某个方法需要NSString,则可以将其传递给NSMutableString。但是,这在其他方面不起作用,并且它们经常被复制并变得不可变。即使您将NSMutableString传递给UILabel的{​​{1}}属性,也会始终返回text

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

您可以更改此代码:

NSString

进入此代码:

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

因为display.text = [displayString stringByAppendingString:[NSString stringWithFormat@"%i",digit]]; 使用接收者的内容(stringByAppendingString)创建一个新的不可变字符串对象,并且该字符串作为参数传递(displayString)。

我怀疑您的问题是[NSString stringWithFormat:@"%i",digit]displayString。 添加一些NSLog来查找...

  1. nil添加-(IBAction)clickDigit:(UIButton *)sender
  2. NSLog(@"Sender is %@",sender)添加-(void)processDigit:(int)digit
  3. 这可以让您了解在Interface Builder中哪些对象是零或者连接错误。

答案 1 :(得分:1)

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

 displayString =[NSMutableString stringWithCapacity:40];

这将解决iSA的问题。

答案 2 :(得分:0)

NSMutableString NSString。更具体地说,它是一个子类。只需分配它就可以了。