在使用protocol和delegate的viewDidLoad之后,字符串变为nil

时间:2012-11-09 17:17:12

标签: objective-c ios delegates protocols

我有一个协议和委托,我让它发送一个字符串然后更改UItabbar上的Tab,我的协议和委托工作只是找到它并在viewcontroller中设置一个字符串但是一旦视图完成加载它变为零 这是我的代码;

-(void)duplicateAsset:(NSString *)serialNumber{

    [self setDubString:serialNumber];
    NSLog(@"delegate called DubString = %@",self.dubString);

}
- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"_dubString in viewDidLoad = %@",self.dubString);
}

输出

 delegate called DubString = SERIALNUMBER
 _dubString in viewDidLoad = (null)

我不确定最近会发生什么事,因为我以前做了很多次。

编辑: 我更新了日志说的内容。我已将字符串属性设置为copystrong,但仍然无法保留字符串

1 个答案:

答案 0 :(得分:1)

在显示的代码中,您实际上并未将dubString作为NSLog的参数,这是您正在使用的实际代码吗?如果是,那就是问题,请在, self.dubString的结束)之前添加NSLog。如果没有,请检查dubString属性是否设置为strongcopy(或者,如果它不是属性,则表示您的setDubString:方法取得字符串的所有权或副本)。

编辑:显示的代码似乎没有任何问题,因此如果您无法跟踪错误,请发布更多代码(例如,设置dubString的所有上下文,例如作为你打电话的地方duplicateAsset)。

与此同时,我建议您检查是否在调用duplicateAsset的同一对象上调用viewDidLoad(在两个调试打印输出中包含对象ID self)。还要确保其他内容没有设置dubString,例如,自己定义setDubString:访问者并在那里添加调试打印输出(或断点)。