objective-c - 将 NSMutableString 分配给 UILabel 文本

标签 objective-c xcode nsstring uilabel nsmutablestring

我正在根据《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");

    }

控制台打印“已处理”。说明这个按钮是起作用的,所以问题出在这行代码:

[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 无法附加字符串以及我需要它为该应用程序执行的许多其他方法。我怎样才能做到这一点?

最佳答案

NSMutableStringNSString 大多数情况下可以互换。 IE。如果方法需要 NSString,您可以向其传递 NSMutableString。但是,反之则不行,而且它们经常被复制并变得不可变。即,即使您将 NSMutableString 传递给 UILabeltext 属性,它也始终会返回 NSString

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

您可以更改此代码:

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

进入这段代码:

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

因为 stringByAppendingString 使用接收者的内容 (displayString) 和作为参数传递的字符串 ([NSString stringWithFormat:@ “%i”,数字])。

我怀疑您的问题是 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 %@", digital, displayString, display );

这应该让您了解哪些对象为零,或者在 Interface Builder 中连接不良。

关于objective-c - 将 NSMutableString 分配给 UILabel 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7617079/

相关文章:

objective-c - 获取数组的大小

objective-c - NSOpenPanel 的几个问题

iphone - 向 App Store 提交新应用程序是否需要 Xcode 6?

ios - 将 base 64 转换为 NSString

ios - unichar*转NSString,获取长度

php - 来自后端的字符串应包含表情符号,但呈现为重音字母

ios - 如何使 View 出现在按钮上? objective-c

objective-c - UIButton 不可点击

ios - Xcode General 选项卡中的 "Embedded Binaries"和 Build Phases 选项卡中的 "Embeded Frameworks"有什么区别?

ios - Xcode 上的 bundle 标识符