0

私の AppDelegate.h: のプロパティ@property (retain, nonatomic) NSString *bmiShared;(私の中で合成されていAppDelegate.mます。)

AppDelegate.h両方の View Controller ヘッダー ファイルをインポートしました。AppDelegate *appDelegate各ヘッダーにもあります。

両方の実装ファイル(ViewController.mおよびTipsViewController.m)に次のものがあります。

appDelegate.bmiShared = bmiView.text;
appDelegate = [[UIApplication sharedApplication] delegate];

データを渡すときに何が間違っているのかわかりません。floatValueofbmiView.textを my で使用できるようにして、TipsViewControlleroffloatValuebmiView.text一定量の場合に my に正しい情報が表示されるようにしますTipsViewController view。それが違いを生む場合、私はストーリーボードを使用しています。

4

3 に答える 3

0

あなたが提供したコードに基づいて、値が割り当てられるappDelegate.bmiSharedappDelegateに値を割り当てようとしている可能性があります(つまり、nilです)。これらの2行を交換してみてください。

self.appDelegate = [[UIApplication sharedApplication] delegate];
self.appDelegate.bmiShared = bmiView.text;

うまくいかない可能性があることは他にもたくさんありますが、すべてのコードを確認しないと、これが最も可能性の高い説明のように思えます。

于 2013-07-27T03:03:14.120 に答える
0

ビューコントローラー間でデータを渡したい場合は、シングルトンの使用を検討する必要があります。

Singleton.h
@property (nonatomic, strong) NSString *bmiShared;
+(Singleton *)sharedStore;

#import "Singleton.h"

@implementation Singleton

+(Singleton *)sharedStore
{
    static Singleton *sharedStore = nil;

    if (!sharedStore) {
        sharedStore = [[super allocWithZone:nil] init];
    }

    return sharedStore;
 }

+(id)allocWithZone:(NSZone *)zone
{
    return [self sharedStore];
}

-(id)init
{
    self = [super init];

    if (self) {
        _bmiShared = [[NSString alloc] init];
}

    return self;
}
@end

それはうまくいくはずです。文字列を設定する場合は、シングルトンをインポートし、割り当て/初期化してから、他のプロパティと同様に bmiShared プロパティを設定します。表示したいビューのアクセサーに対して同じことを行います。

于 2013-07-27T04:02:48.750 に答える
0

これは、あなたが同じ主題について尋ねた今日の 2 番目の質問であり、あなたがしていることのほとんどは正しくありません。コントローラー間でデータを渡すには、アプリ デリゲートを使用しないでください。また、シングルトンを使用しないでください。あなたがする必要があるのは、基本に戻って、自分が何をしているのかを理解しようとすることです. 2 つのコントローラー間でのデータの受け渡しは、単純な 3 ステップのプロセスです。

  1. データを保持するために、「渡す」View Controllerにプロパティを作成します。
  2. 画面上にある、または表示される予定の「受け渡し」コントローラーへの参照を取得します。
  3. 「引き渡し元」コントローラーからのデータを使用して、作成したそのプロパティの値を設定します。

ほとんどの初心者が混乱するステップは #2 です。「渡す」コントローラーのインスタンスを初期化するだけでなく、作成したものへの参照を取得する必要があります (通常は xib またはストーリーボードで)。それをどのように正確に行うかは、これら 2 つのコントローラーが互いにどのように関係しているかによって異なります。一方が他方のインスタンスを作成し、それをプッシュまたは提示しますか? そのコントローラーは、xib、ストーリーボード、またはコードで作成された「受け渡し」ですか? コントローラーは、ナビゲーション コントローラーまたはタブ バー コントローラーに埋め込まれていますか? コードで 2 番目のコントローラーに移動しますか、それともセグエで直接移動しますか? これらは、あなたが考える必要がある質問であり、どのように答えるかを理解する必要があります。そうすれば、あなたが持っているどんなセットアップでも正しく理解できるようになります.

コントローラーのセットアップ (この 2 つが互いにどのように関係しているか、どこで作成したか) を説明していただければ、ステップ 2 のより具体的な答えを示すことができます。

編集後:

セグエを使用してビュー間を移動する場合、データを渡す場所は prepareForSegue です。TipsViewController は segue.destinationViewController になるので、次のようにします。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"segueName"]) {
        TipsViewController *tipsVC = [segue destinationViewController];
        tipsVC.bmi = self.bmi;
    }
}

この例では、TipsViewController に bmi という名前のプロパティが作成されており、ViewController にもそのプロパティがあると想定しています。これはすべて、Apple の「iOS 用のビュー コントローラ プログラミング ガイド」で説明されています。ぜひ勉強してください。

于 2013-07-27T04:51:00.317 に答える