你好我相信你们都可以回答这个问题,但是它因为我的愚蠢而烦恼了。
我有一个数组,可以存储didSelectRowAtIndexPath
行,然后存储NSLog formatSelected。然后我弹出视图控制器并将formatSelected作为botton标题显示。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *formatSelected = [[NSString alloc]init];
formatSelected:[format objectAtIndex:indexPath.row];
NSLog(@"this is the format selected %@",formatSelected);
[button2 setTitle:[format objectAtIndex:indexPath.row] forState:UIControlStateNormal];
[navigationControler popViewControllerAnimated:YES];
}
工作正常。
我的问题是,在上一个视图中,新标题按钮是我有另一个按钮和标签。
我希望能够按下第二个按钮并在标签中显示formatSelected String或NSLog it
-(IBAction)printResults{
NSString *fmat = [[NSString alloc]initWithFormat:@"%@",formatSelected];
NSLog(@"%@",fmat);
NSLog(@"nslong button pressed");}
但NSLog只显示(null)?
我有@property (nonatomic, retain) NSString *formatSelected;
并合成了它。
我做错了什么?
答案 0 :(得分:1)
您在formatSelected
方法中将tableView:didSelectRowAtIndexPath:
声明为局部变量。在退出方法后,您在此方法中分配给formatSelected
的任何内容都将无法访问。您将所选格式分配给此局部变量而不是您的属性(及其相应的实例变量)。
使用[self setFormatSelected:[format objectAtIndex:indexPath.row]];
并完全删除NSString *formatSelected...
行。
答案 1 :(得分:0)
您几乎总是希望将copy
与NSString *一起使用,而不是retain
。有关详细信息,请参阅此答案:NSString property: copy or retain?