0

こんにちはすべて私はビュー間で値を渡すのに多くの問題を抱えています、

3つのテキストボックスを持つStartViewControllerがありますFirstNameLastNameEmailそれらの値をViewControllerに渡したいいくつかの異なることを試しましたが、何も機能していないようですこれを試しました:http: //highscoreapps.blogspot.com/ 2012/05 / passing-data-between-view-controllers.html http://www.theappcodeblog.com/2011/04/15/passing-data-between-views-tutorial-using-a-protocol-delegate-in -your-iphone-app /

しかし、私は何も機能させることができないようです。これまでの私のコードの一部を次に示します。

StartViewControler.hで

@protocol DataPassingControllerDelegate <NSObject>

-(void)passDataMethod:(NSString *)TextFirstName Data2:(NSString *)TextLastName Data3:(NSString *)TextEmail;

@property(nonatomic,retain) IBOutlet UITextField *uTextFirstName;
@property(nonatomic,retain) IBOutlet UITextField *uTextLastName;
@property(nonatomic,retain) IBOutlet UITextField *uTextEmail;

@property (nonatomic, strong) NSString *sTextFirstName;
@property (nonatomic, strong) NSString *sTextLastName;
@property (nonatomic, strong) NSString *sTextEmail; 

@property (nonatomic, unsafe_unretained) id<DataPassingControllerDelegate> delegate;

StartViewController.Mで

-(IBAction)ButtonTakeSurvey:(id)sender{
self.sTextFirstName = uTextFirstName.text;
self.sTextLastName = uTextLastName.text;
self.sTextEmail = uTextEmail.text;

[self.delegate passDataMethod:sTextFirstName Data2:sTextLastName Data3:sTextEmail];

ViewController *myView1 = [[ViewController alloc]initWithNibName:@"ViewController" bundle:nil];
[self.view addSubview:myView1.view];
}

ViewController.HIに#import"StartViewController.h"を追加しました

@interface ViewController : UIViewController <DataPassingControllerDelegate> 

ViewController.mでfirstNameLastNameEmailを取得するにはどうすればよいですか?onloadにある3つのローカル変数にデータを入力したいと思います。

ありがとう!

4

3 に答える 3

2

私は通常、シングルトン クラスを使用して、ViewController 間の通信を処理します。Singleton パターンを使用すると、コントローラー自体からデータを分離できます。以下は、私が使用するコードのバージョンです。

DataManager.h

#import <Foundation/Foundation.h>

@interface DataManager : NSObject

+(DataManager*)sharedInstance;
-(void) setObject:(id)anObject forKey:(id<NSCopying>)aKey;
-(id) objectForKey:(id)aKey;
-(void) removeAllObjects;
@end

DataManager.m

#import "DataManager.h"

@implementation DataManager

static DataManager *sharedInstance;
static NSMutableDictionary* dictionary;

- (id)init {
    self = [super init];
    if (self) {
        dictionary = [[NSMutableDictionary alloc] initWithCapacity:0];
    }
    return self;
}


+ (DataManager *) sharedInstance
{
    @synchronized(self)
    {
        if (sharedInstance == NULL)
        {
            sharedInstance = [[DataManager alloc] init];
        }
    }

    return sharedInstance;
}


-(void) setObject:(id)anObject forKey:(id<NSCopying>)aKey
{
    [dictionary setObject:anObject forKey:aKey];
}

-(id) objectForKey:(id)aKey
{
    return [dictionary objectForKey:aKey];
}

-(void) removeAllObjects
{
    [dictionary removeAllObjects];
}

@end

これを使用するには、最初のView ControllerでsharedInstanceを取得し、ViewControllerをプッシュする(モーダルVCの場合は提示する)前に値を設定するだけです。

DataManager* dm = [DataManager sharedInstance]
[dm removeAllObjects];
[dm setObject:firstNameString forKey:@"firstName"];
[dm setObject:lastNameString forKey:@"lastName"];
[dm setObject:emailString forKey:@"email"];

次に、2番目のViewControllerのViewDidLoad(またはviewWillAppearなど)で、次のようにシングルトンから値を取得できます。

DataManager* dm = [DataManager sharedInstance]
NSString* firstName = (NSString*)[dm objectForKey:@"firstName"];
NSString* lastName = (NSString*)[dm objectForKey:@"lastName"];
NSString* email = (NSString*)[dm objectForKey:@"email"];
//do stuff with the values.

シングルトンについて詳しく知りたい場合 (現在パターンに慣れていない場合はお勧めします)、ウィキペディアの記事は非常に優れており、それについて詳しく説明している OO 設計サイトが多数あります。

于 2013-03-04T18:08:41.790 に答える
0

あなたがする必要があるのはpassDataMethodあなたのViewController.mに追加することだけのように私には見えます:

-(void)passDataMethod:(NSString *)TextFirstName Data2:(NSString *)TextLastName Data3:(NSString *)TextEmail
{
    NSString *myLocalVar1 = [NSString stringWithString:TextFirstName];
    NSString *myLocalVar2 = [NSString stringWithString:TextLastName];
    NSString *myLocalVar3 = [NSString stringWithString:TextEmail];

    // Do something useful with myLocalVar1, 2, and 3 here
}
于 2013-03-04T18:02:41.263 に答える
0

データモデルをコントローラーから分離することをお勧めします。これを行うには多くの方法がありますが、簡単な方法は、「ユーザー プロファイル」クラスをシングルトン (アプリ全体の共有インスタンス) として作成し、そこにデータを保存することです。そうすれば、そのデータを必要とする各コントローラーは、自分自身でデータにアクセスできます。

于 2013-03-04T17:48:35.493 に答える