SetScoringTableViewController.h:
@interface SetScoringTableViewController : UITableViewController
@property (nonatomic, strong) NSString *name1;
@end
SetScoringTableViewController.m:
@implementation SetScoringTableViewController
@synthesize name1;
- (void)viewDidLoad {
[super viewDidLoad];
name1 = @"Hello World"
}
GameDetailsTableViewController.m
if (indexPath.section == 0 && indexPath.row == 0) {
SetScoringTableViewController *setScoring = [[SetScoringTableViewController alloc]init];
static NSString *CellIdentifer1 = @"GameDetailsSetScoringCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifer1];
label = (UILabel *)[cell viewWithTag:0];
label.text = [NSString stringWithFormat: @" %@", setScoring.name1];
return cell;
}
当我尝试运行它时,我得到的只是null。能帮我找到如何展示" Hello World"在我的标签上。任何帮助将不胜感激。
答案 0 :(得分:2)
viewDidLoad
方法可能尚未调用。覆盖init
上的SetScoringTableViewController
方法并在其中设置值:
- (instancetype)init {
if (self = [super init]) {
_name = @"Hello World";
}
return self;
}
为什么要从cellForRowAtIndexPath
方法实例化视图控制器?它被立即释放出来。
答案 1 :(得分:1)
当您在GameDetailsTableViewController.m中调用setScoring.name1时,您正在调用刚刚在SetScoringTableViewController *setScoring = [[SetScoringTableViewController alloc]init];
中创建的对象的属性。您的viewDidLoad
从未被执行过,或者即使它已被执行,setScoring
也是SetScoringTableViewController
类的另一个实例。
首先需要在调用之前为name1分配一些值。例如:
if (indexPath.section == 0 && indexPath.row == 0) {
SetScoringTableViewController *setScoring = [[SetScoringTableViewController alloc]init];
static NSString *CellIdentifer1 = @"GameDetailsSetScoringCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifer1];
label = (UILabel *)[cell viewWithTag:0];
setScoring.name1 = @"Hello World"
label.text = [NSString stringWithFormat: @" %@", setScoring.name1];
return cell;
}
现在您的标签将包含正确的文字。但在这种情况下,它根本没有任何意义。如果你描述一下你究竟想要做什么,也许我可以为你提供更好的解释。