【问题标题】:Swapping Objects in objective c在目标 c 中交换对象
【发布时间】:2012-08-05 04:27:00
【问题描述】:

我试图在按钮操作时交换两个对象,但我无法让它工作。这是第一次交换,但是当我下次单击该按钮时,它会因 EXC_BAD_ACCESS 而崩溃。

这是代码

-(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];

}

我在 Search DTO(searchDTO) 中分配 fromDTO 和 toDTO。

【问题讨论】:

    标签: objective-c xcode oop object ownership


    【解决方案1】:

    如果你不使用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];
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    相关资源
    最近更新 更多