我用这样的timmer调用了一个方法。
timmer= [NSTimer scheduledTimerWithTimeInterval:5.0
target:self
selector:@selector(callWaiter)
userInfo:nil repeats:YES];
这是callWaiter的代码
-(void)callWaiter
{
@try
{
NSLog(@"current serverTime----1=%@",currentSeverTime);
NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"%@table_update?tag=update&admin=%@&table=%@&time=%@",baseUrl,adminId,@"Waitercall",[currentSeverTime stringByReplacingOccurrencesOfString:@" " withString:@"%20"]]];
JsonParse5 *js5=[[JsonParse5 alloc] init];
if([[js5 fetchData:[NSData dataWithContentsOfURL:url]] count]>0)
{
UIAlertView *grAlert=[[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"%@%@",LSSTRING(@"Waiter call - please attend table #"),[[[js5 fetchData:[NSData dataWithContentsOfURL:url]] objectAtIndex:0] objectForKey:@"table_no"] ] message:nil delegate:self cancelButtonTitle:LSSTRING(@"OK") otherButtonTitles:nil];
[grAlert show];
grAlert.tag=1;
[grAlert release];
}
else
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
// this is imporant - we set our input date format to match our input string
// if format doesn't match you'll get nil from your string, so be careful
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *dateFromString = [[NSDate alloc] init];
// voila!
dateFromString = [dateFormatter dateFromString:currentSeverTime];
NSDate *correctDate = [NSDate dateWithTimeInterval:5.0 sinceDate:dateFromString];
currentSeverTime=[dateFormatter stringFromDate:correctDate];
NSLog(@"current serverTime----2=%@",currentSeverTime);
}
}
@catch (NSException *exception) {
NSLog(@"exception=%@",exception);
}
}
在第一次“当前serverTime ---- 1”日志之前第二次崩溃时,它工作正常。 我在currentSeverTime中分配值如下。
currentSeverTime = @“2013-07-16 07:15:50”;
请帮助我谢谢。
答案 0 :(得分:0)
我认为原因是在
之后currentSeverTime=[dateFormatter stringFromDate:correctDate];
currentSeverTime
未被保留,currentSeverTime
在到达方法结束时被释放。并且currentSeverTime
成了狂野的参考。第二次使用它时会导致EXC_BAD_ACCESS。
您可以将currentSeverTime
作为属性来更正代码。
在.h文件中:
@property (retain) NSString *currentSeverTime;
在.m文件中:
:
[_ currentSeverTime release];
以这种方式使用它:
self.currentSeverTime = [dateFormatter stringFromDate:correctDate];
希望有所帮助。