0

FirstViewControllerからDetailViewControllerにデータを渡します。DetailViewControllerでラベルのテキストを設定できません。FirstViewControllerはテーブルビューであり、優れています。

メソッドupdateRowNumberを使用してrowNumberを設定します。DetailViewControllerでは、デバッガーを使用してrowNumberが正しいことを確認できます。ただし、ラベルのテキストはビューに表示されません。

誰かが私を助けることができますか?

私のFirstViewControllerで

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

if (dvController == nil)
{
    DetailViewController *aController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];

    self.dvController = aController;

    [aController release];
}   

[[self navigationController] pushViewController:dvController animated:YES];
[dvController updateRowNumber:indexPath.row];


}

私のDetailViewController.hで

#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController
{
    int rowNumber;
    IBOutlet UILabel *message;
}

@property(readwrite) int rowNumber;
@property(nonatomic, retain) IBOutlet UILabel *message;
- (void) updateRowNumber:(int) theindex;


@end

私のDetailViewController.mで

#import "DetailViewController.h"


@interface DetailViewController ()

@end

@implementation DetailViewController

@synthesize message, rowNumber;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}

- (void) updateRowNumber: (int) theindex
{
    rowNumber = theindex + 1;
    message.text = [NSString stringWithFormat:@"row %i was clicked", rowNumber];
}

- (void)dealloc
{
    [message release];
    [super dealloc];
}

- (void)viewDidLoad
{
    message.text = [NSString stringWithFormat:@"row %i was clicked ", rowNumber];
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Do any additional setup after loading the view from its nib.
}

- (void)viewWillAppear:(BOOL)animated
{
    //message.text = [NSString stringWithFormat:@"row %i was clicked ", rowNumber];

    [super viewWillAppear: animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear: animated];
}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
4

1 に答える 1

1

ビューがどのようにロードされるかを学ぶ必要があります。プロセスはドキュメントに詳しく説明されています

何が起こるかというとview、すべてのアウトレットはがロードされるnilまでです。viewself.view;updateRowNumber:


[super viewDidLoad]また、オーバーライドされた の先頭で 呼び出す方が良いことに注意してください。カスタマイズされたロジックを実行する前に、スタッフを実行viewDidLoadさせる必要があるため、これは理にかなって います。標準が発火する前にロジックを実行する必要があるため、 は異なります。理解できることを願っています。UIViewContorllerdeallocNSObject -dealloc

于 2012-11-08T14:01:15.197 に答える