2012-08-08 66 views
1

我试图在按钮操作时交换两个对象,但是我无法让它工作。它是第一次交换,但下次单击该按钮时,它会与EXC_BAD_ACCESS一起崩溃。交换目标中的对象c

下面的代码

-(IBAction)swapLocation 
{ 
    CCLocDTO *tempDto = searchDTO.toDTO; 
    searchDTO.toDTO = searchDTO.fromDTO; 
    searchDTO.fromDTO = tempDto; 

    NSLog(@"From Location is %@",searchDTO.fromDTO.streetAddress); //it becomes empty on next button click 
    NSLog(@"To Location is %@",searchDTO.toDTO.streetAddress); 
    NSLog(@"From Special Location is %@",searchDTO.fromSpecialDTO.locationName); 
    NSLog(@"To Special Location is %@",searchDTO.toSpecialDTO.locationName); 

    [self.tableView reloadData]; 

} 

我在寻找DTO(searchDTO)分配fromDTO和toDTO。

回答

4

如果你不使用ARC,你需要保留tempDto设置searchDTO.toDTO到别的东西之前;否则旧值可能会被释放,并且您将在tempDto中有一个悬挂参考。它应该是这样的:

CCLocDTO *tempDto = [searchDTO.toDTO retain]; 
searchDTO.toDTO = searchDTO.fromDTO; 
searchDTO.fromDTO = [tempDto autorelease]; 

或像这样:

CCLocDTO *tempDto = [searchDTO.toDTO retain]; 
searchDTO.toDTO = searchDTO.fromDTO; 
searchDTO.fromDTO = tempDto; 
[tempDto release]; 
+0

不是像保留'回报[栏保留]自动释放]'实现的属性的默认消气? – JustSid 2012-08-08 05:28:15

+0

谢谢汤姆,你救了我的一天。 – Anish 2012-08-08 05:29:42

+0

@JustSid nope,我很确定它只是返回伊娃而没有触及保留计数。 – 2012-08-08 05:30:53