适用于iPhone的Objective-C - 使用简单日期命令时应用程序崩溃

时间:2010-02-06 23:40:50

标签: iphone objective-c cocoa-touch

我还在学习Objective-C,如果这是一个简单的业余错误,请原谅我,但我想我们都必须以某种方式学习。

基本上我有一个带有简单文本的应用程序,在屏幕的标题处,已经被IBOutletted称为“headerText”。我想把它读作“2月份摘要”,用2月份取代2月 - 所以月份必须动态提取。

   - (void)setHeaderText {
     NSString *headerTextTitle;
     NSString *monthString;
     NSDate *month;
     NSDateFormatter *dateFormat;

     month = [[NSDate alloc] init]; // Automatically fills in today's date
     [dateFormat setDateFormat:@"MMMM"];
     monthString = [dateFormat stringFromDate:month];

     headerTextTitle = [[NSString alloc] initWithFormat:@"Summary for (%@)", monthString];
     headerText.text = headerTextTitle;

     [headerTextTitle release];
     [monthString release];
     [month release];
     [dateFormat release];
    }

我显然可以修改文本和内容,但每当我在viewDidLoad上调用此方法时,我发现应用程序崩溃了。谁能告诉我什么是错的?我在这里认为它错误:

[dateFormat setDateFormat:@"MMMM"];

因为在使用断点时,那里的东西有点滑稽。我究竟做错了什么?我很困惑。

我很感激帮助!

杰克

编辑:我现在正在这样做:

month = [[NSDate alloc] init]; // Automatically fills in today's date
    dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"MMMM"];
    monthString = [dateFormat stringFromDate:month];

但它仍然失败了?

5 个答案:

答案 0 :(得分:3)

您的dateFormat未定义为开始。

你需要初始化它,比如

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];

答案 1 :(得分:1)

你应该在使用之前分配/初始化NSDateFormatter ......

答案 2 :(得分:1)

您不应该释放monthString,因为它是自动释放对象。

请参阅this

  

对象所有权

     

规则#1 - 如果使用alloc或copy创建对象,则需要释放该对象。

     

规则#2 - 如果您没有直接创建对象,请不要尝试释放该对象的内存。

答案 3 :(得分:1)

通过做这样的事情来缩短它的时间:

- (void) setHeaderText
{
    NSDateFormatter* formatter = [NSDateFormatter defaultFormatterBehavior];
    [formatter setDateFormat: @"MMMM"];
    headerText.text = [NSString stringWithFormat:
        @"Summary for (%@)", [dateFormat stringFromDate: [NSDate date]]];
}

答案 4 :(得分:0)

解决了这个问题:

NSString *monthString = [[NSString alloc] init];

不得不投入。现在它工作正常:)谢谢大家!