2

別のビューコントローラー (iOS) からいくつかのものにアクセスしようとしています。

私はViewController.hを持っています:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextFieldDelegate> {
    ...
}

@end

ViewController.m:

#import "ViewController.h"
#import "ViewController2.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
   ViewController2.someVar = @"cakes"; // this is where I'm trying to set something in vc2
}

ViewController2.h:

#import <UIKit/UIKit.h>

@interface ViewController2 : UIViewController <UITableViewDataSource, UITableViewDelegate, UISearchDisplayDelegate>
{
   ...
}

@property (nonatomic, copy) NSString *someVar;

@end

ViewController2.m:

#import "ViewController2.h"

@interface ViewController2 ()

@end

@implementation ViewController2

@synthesize someVar;

etc.

しかし、この var にアクセスしようとした行で、次のエラーが表示されます。

タイプ「ViewController2」のオブジェクトにプロパティ「someVar」が見つかりません。

この他のView Controllerにどのようにアクセスできますか?

4

2 に答える 2

3

これを行う別の方法は、デリゲートを使用することです。AppDelegate で ViewController1 を作成した場合は、AppDelegate または ViewController を作成した場所に ViewController2 も作成する必要があります。次に、ViewController1 は AppDelegate にメッセージを送信して ViewController2 からデータを取得し、その逆も同様です。これにより、ViewController1 と ViewController2 は互いに依存しなくなります。

したがって、AppDelegate.h には次のようなものがあります。

@interface AppDelegate : NSObject <MyViewControllerDelegate>

@property (nonatomic) ViewController1 *viewController1;
@property (nonatomic) ViewController2 *viewController2;

@end

次に、両方のView Controllerで、この行を.hに追加できます

@property (nonatomic) id<MyViewControllerDelegate> delegate;

これにより、ViewController の .m 内からデリゲートを参照するために使用する変数が得られます。

MyViewControllerDelegate プロトコルも作成する必要があるため、MyViewControllerDelegate.h というファイルに

@protocol MyViewControllerDelegate

- (ViewController1 *) viewController1;

- (ViewControlelr2 *) viewController2;

@end

次に、AppDelegate.m で ViewControllers を作成するときに、AppDelegate を ViewController のデリゲートとしても設定する必要があります。

self.viewController1 = [[ViewController1 alloc] init];
self.viewController1.delegate = self;
self.viewController2 = [[ViewController2 alloc] init];
self.viewController2.delegate = self;

したがって、このデリゲートの設定がすべて完了したら、次を使用して、デリゲートを介して viewController1 から viewController2.someVar にアクセスできるはずです。

self.delegate.viewController2.someVar = @"Cakes";

これが長すぎないことを願っています。

于 2013-01-12T21:51:09.733 に答える
3

ViewControlle2にオブジェクトを作成する必要がありますViewcontroller.m

ViewController2 *myVC2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];
myVC2.someVar = @"cakes";
于 2013-01-12T15:34:17.313 に答える