我的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];
答案 0 :(得分:0)
来自评论:
事实证明,错误是由直接将新值分配给实例变量的代码引起的,而不是使用相关属性的set...
方法(或其对应的点表示法)。这会绕过属性属性并导致分配自动释放的字符串。
(主要线索是仪器保留历史记录中缺失的条目。)