打印NSString时崩溃应用程序

时间:2012-11-30 06:08:45

标签: iphone objective-c

使用字符串崩溃应用程序。
temp是普通字符串,strStartDate也是日期字符串。 .h文件

NSString *temp;
NSString *strStartDate
int status;

.m文件

-(void)viewDidLoad
{
    [super viewDidLoad];
    status = 1;
     strStartDate=[[NSString alloc]init];
    [self stateChanged];
}
-(void)stateChanged
{
    switch(status)
    {
    case 0:
        NSLog(@"%@",temp);
        NSLog(@"Start Date : %@",strStartDate);
        break;

    case 1:
        temp=[[NSString alloc]initWithString:@"Temp is here"];
        chargeStartDate=[[NSDate date] retain];
        NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
        [dateFormat setDateFormat:@"dd/MM/YYYY"];
        strStartDate =  [dateFormat stringFromDate:chargeStartDate];
        NSLog(@"string of start date : %@",strStartDate);
        [timeFormat release];
        [dateFormat release];
        break;
    }
}

temp是普通字符串,strStartDate也是日期字符串。 字符串tempstrStartDate都分配相同的位置,两者都是类变量,并打印相同的位置,但在case 0 temp中打印时strStarDate崩溃。为什么呢?

我知道这很简单,但我无法理解。请帮帮我。

2 个答案:

答案 0 :(得分:1)

在使用stringFromDate初始化strStartDate之后,需要对其进行保留。该调用的结果将自动释放,因此您需要使用retain来停止释放该对象。

答案 1 :(得分:0)

它的发生是因为在strStartDate变量中没有存储值而且它是nil(NULL)所以当你想用%@打印它时,它的不是字符串值,所以app崩溃了..

尝试首先分配strStartDate = @"";然后打印它,它会起作用..