如何显示另一个类的变量?

时间:2015-08-28 20:16:27

标签: objective-c xcode

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"在我的标签上。任何帮助将不胜感激。

2 个答案:

答案 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;
} 

现在您的标签将包含正确的文字。但在这种情况下,它根本没有任何意义。如果你描述一下你究竟想要做什么,也许我可以为你提供更好的解释。