我还在学习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];
但它仍然失败了?
答案 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];
不得不投入。现在它工作正常:)谢谢大家!