0

我的 iPhone 应用程序是Tab based. 在一个选项卡中,假设Security Tab我有三个视图控制器First, Second, Third。我正在将字符串值Third从视图控制器传递给Second视图控制器。selectedAlertDesc 是我的Third视图控制器的 NSString 对象。

Third视图控制器中:

@property (nonatomic,retain) NSString *selectedAlertDesc;
@synthesize selectedAlertDesc = _selectedAlertDesc;

Second视图控制器中:

Third *controller = [[Third alloc] init];
[controller setSelectedAlertDesc:[[alertArray objectAtIndex:indexPath.row] objectForKey:@"alertDesc"]];
[self.navigationController pushViewController:controller animated:YES];
[controller release];

它工作正常,直到我更改选项卡。如果我将安全选项卡留在Third视图控制器页面并在访问其他选项卡后返回,它会崩溃。它指出, selectedAlertDesc 变成了僵尸。

-[CFString stringByReplacingOccurrencesOfString:withString:]: message sent to deallocated instance 0xeb3d760

我该如何解决这个问题?我相信我们不应该初始化合成对象。我在这里忘记了什么吗?

编辑:

正如建议的那样,我使用工具来检查分配/保留历史。我得到了以下内容: - 所以在使用之后selectedAlertDesc,我保留了它。这是正确的做法吗??它工作正常!

_selectedAlertDesc = [_selectedAlertDesc stringByReplacingOccurrencesOfString:@"opentag" withString:@"<"];
_selectedAlertDesc = [_selectedAlertDesc stringByReplacingOccurrencesOfString:@"closetag" withString:@">"];
[txtTxtVw setText:_selectedAlertDesc];

在此处输入图像描述

4

1 回答 1

0

从评论:

事实证明,该错误是由直接将新值分配给实例变量的代码引起的,而不是使用set...相关属性的方法(或其相应的点表示法)。这会绕过属性属性并导致分配自动释放的字符串。

(主要线索是仪器保留历史中缺少的条目。)

于 2012-10-15T14:31:04.610 回答