0

私は、xcode プロジェクトをストーリーボード スタイルに更新することに取り組んでおり、古い xcode xib の 3 つのビューを新しいストーリーボード スタイルの 3 つのビュー コントローラーに変更しました。1 つのビュー コントローラーからデータを渡すために作成した文字列に問題があります。その他、生年月日などの詳細情報を取得するために3番目のView Controllerに切り替えると、最初のデータを含む最初のラベルが空白になります。

私は3つのView Controllerを持っています。1 つ目は、文字列 *concentrationString と *DOBString がある場所です。これは、他のビューで選択されているデータが表示される場所です。

FirstViewController.h

@interface FirstViewController : UIViewController {
    IBOutlet UILabel *concentrationlabel;
    IBOutlet UILabel *DOBlabel;

}

@property (strong, nonatomic) NSString *concentrationString;
@property (strong, nonatomic) NSString *DOBString;

FirstViewController.m

#import "FirstViewController.h"
#import "SecondViewController.h"

@interface FirstViewController ()

@end

@implementation FirstViewController
@synthesize concentrationString, DOBString;

...


- (void)viewDidLoad
{
    [super viewDidLoad];

     concentrationlabel.text = concentrationString;
     DOBlabel.text = DOBString;

...

SecondViewController.m には、私が見つけた prepareForSegue のものを使用して濃度ラベルにどの値を入れるかを最初のビュー コントローラに指示する薬用のボタンがいくつかあります。

#import "SecondViewController.h"
#import "FirstViewController.h"

...

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"Adrenaline"]) {
        NSString *concentrationString = @"Adrenaline";
        FirstViewController *vc = [segue destinationViewController];
        vc.concentrationString = concentrationString; }


    else if ([segue.identifier isEqualToString:@"Morphine"]) {
        NSString *concentrationString = @"Morphine";
        FirstViewController *vc = [segue destinationViewController];
        vc.concentrationString = concentrationString; }

クリックされたボタンに応じて、最初のビューのラベルが「アドレナリン」または「モルヒネ」に更新されました。

ユーザーが ThirdViewController.m に移動してピッカーから患者の生年月日を選択し、prepareForSegue メソッドを使用してその値を送り返すと、concentrationString への変更を指定していませんが、最初のラベルが空白になります。

#import "DOBViewController.h"
#import "FirstViewController.h"

@interface DOBViewController ()

@end

@implementation DOBViewController

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

- (void)viewDidLoad {
    NSDate *now = [NSDate date];
    [picker setDate:now animated:YES];
    [DOBset setTitle:@"Date of birth" forState:UIControlStateNormal];
}

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

-(IBAction)displayDate:(id)sender {
//  NSDate * selected = [picker date];
//  NSString * date = [selected description];
    NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
    [outputFormatter setDateFormat:@"dd-MMMM-yyy"]; //24hr time format
    NSString *dateString = [outputFormatter stringFromDate:picker.date];
    [DOBset setTitle:dateString forState:UIControlStateNormal];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"DOB"]) {
        NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
        [outputFormatter setDateFormat:@"dd-MMMM-yyy"]; //24hr time format
        NSString *DOBString = [outputFormatter stringFromDate:picker.date];
        FirstViewController *vc = [segue destinationViewController];
        vc.DOBString = DOBString;
    }
}

@end

これをどのように機能させる必要がありますか?前もって感謝します。

よろしく、カート。

4

2 に答える 2

0

このように FirstViewController を変更してみてください...

FirstViewController.h

@interface FirstViewController : UIViewController

@property (strong, nonatomic) NSString *concentrationString;
@property (strong, nonatomic) NSString *dOBString;

@end

FirstViewController.m

#import "FirstViewController.h"
#import "SecondViewController.h"

@interface FirstViewController ()

// anything that isn't accessed from outside this class should be
// in the private category extension.
@property (nonatomic, weak) IBOutlet UILabel *concentrationLabel;
@property (nonatomic, weak) IBOutlet UILabel *dOBLabel;

@end

@implementation FirstViewController

...

- (void)viewDidLoad
{
    [super viewDidLoad];

     self.concentrationLabel.text = self.concentrationString;
     self.dOBLabel.text = self.dOBString;
}
...

プログラムを、実際には同じものを指していない ivar とプロパティと混同していると思います。

プロパティを使用する場合は、必ず を使用して参照してくださいself.property。(使用する必要があるゲッター、セッター、またはコンストラクターを除く_property)。

このようにコードを変更すると、動作することがわかるはずです。

また、変数名は小文字で始まり、キャメル ケースを使用します。

つまり、DOBlabel は問題ありません... dOBLabel は問題ありません。濃度ラベルは問題ありません...濃度ラベルは問題ありません。

于 2013-08-28T08:08:03.363 に答える