【问题标题】:Very simple iPhone App crashes on UILabel settext非常简单的 iPhone App 在 UILabel settext 上崩溃
【发布时间】:2011-01-04 10:28:24
【问题描述】:

我有一个非常简单的应用程序。我在 IB 中有一个按钮和一个标签。我有一个 onClick 的 IBAction,它在标签上调用 setText。标签有一个出口。一切都在 IB 中连接。它在模拟器中第一次使应用程序崩溃。当我再次启动它时,它会设置文本。然后下次再次崩溃。它总是在实际设备上崩溃。这应该很简单,但我不确定我做错了什么。

谢谢。

在我的 .h 文件中:

#import <UIKit/UIKit.h>

@interface UntitledViewController : UIViewController {
IBOutlet UILabel *label;
IBOutlet UIButton *button;
}

@property (nonatomic, retain) UILabel *label;

-(IBAction) onClick1: (id) sender;

@end

在 .m 中:

- (IBAction) onClick1: (id) sender
{
    //[label setText:@"Hello World!"];
    label.text = @"Hello World!";
    //[button setTitle:@"Clicked" forState:UIControlStateNormal];
}

抱歉,我是该网站的新手。如何获取崩溃日志和堆栈?谢谢。

【问题讨论】:

  • 向我们展示一个展示该错误的简单代码示例。
  • 首先,您没有提供足够的详细信息。崩溃日志,堆栈?
  • 您从控制台获取崩溃日志 - (单击运行 -> 控制台)。您从调试器(运行 -> 调试器)获取堆栈跟踪 - 控制台是您的应用程序输出的消息。调试器可让您查看代码崩溃时的状态。堆栈跟踪是调试器中显示函数名称列表的左上角部分。
  • 如果您将NSLog(@"%@", label); 行作为onClick1 方法的第一行,您会在控制台中看到什么?
  • 您确定要在 .m 文件的顶部合成您的标签吗?

标签: iphone ios crash uilabel settext


【解决方案1】:

编辑:虽然这个答案在技术上是正确的,但它根本没有回答这个问题:(对不起


如果您在设置标签文本时遇到崩溃,那么它会告诉我您过去已为标签设置了一个值,但它没有被正确保留。

我猜你有这样的代码:

label = [[[UILabel alloc] initWithFrame:CGRectMake(0,0,10,10)] autorelease];

什么时候你应该有类似的代码

// Option 1
self.label = [[[UILabel alloc] initWithFrame:CGRectMake(0,0,10,10)] autorelease];

// Option 2
label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,10,10)];

(第一个使用属性retain to label,第二个不自动释放,第一个是推荐的方式)

【讨论】:

  • 嗯。我从不分配标签。在 IB 中创建它时我不知道我需要这样做。
  • 啊,我错过了头文件中的 IBOutlet(并且误读了问题!)。对不起!
  • 别担心!感谢您的宝贵时间。
【解决方案2】:

仔细检查您在 IB 中为标签设置了连接。
在调试器中设置断点 label.text = @"Hello World!";
并确保 label 不是 nil 这里。
如果它是 nil 你没有在 IB 中为它设置连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多