したがって、Foo.hで定義され、Foo.mで実装されたクラスがあります。次に、Fooをビューに接続するための複数のメソッドを持つFooController.h/mというコントローラーがあります。
Fooには複数のプロパティがあるので、次のように定義された3つだけを参照します。
// Foo.h
@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSNumber *level;
@property (strong, nonatomic) Foo1 *foo1;
ご覧のとおり、Fooには、他の場所で定義したクラスFoo1のプロパティがあります。Foo1の実装は完了していませんが、基本的には、定義されているプロパティのセットにすぎません。(私はFoo1のinitメソッドを定義しませんでした。それが問題になる可能性がありますか?)Foo1の1つのプロパティは、次のとおりです。
// Foo1.h
@property (strong, nonatomic) NSString*name;
次のFooメソッドが定義されています。
// Foo.m
-(id) initWithName:(NSString *)name
level:(NSNumber *)level
foo1:(Foo1 *)foo1
{
self = [super init];
if (self) {
_name = name;
_level = level;
_foo1 = foo1;
return self;
}
return nil;
}
FooControllerのメソッドの1つは、makeRandomFooと呼ばれ、総称名、ランダムレベル、および静的に定義されたfoo1のインスタンス(サイズの意味で静的)を生成します。実装は次のとおりです。
// FooController.h
#import "Foo.h"
#import "Foo1.h"
@interface FooController : NSObject
@property (strong, nonatomic) Foo *foo;
- (Foo *)makeRandomFoo:(Foo *)foo;
// FooContoller.m
#import <stdlib.h>
@implementation FooController
@synthesize foo = _foo;
- (Foo *)makeRandomFoo:(Foo *)foo
{
NSString *name = @"Random Foo 1";
NSNumber *level = [NSNumber numberWithInt:(rand() / 100)];
Foo1 *foo1 = [[foo1 alloc] init];
foo = [[foo alloc] initwithName:name
atLevel:level
withFoo1:foo1];
return foo;
}
次に、ビューコントローラーFooViewController.h / mで、「Make Random Foo」という丸い長方形のボタンと、「nameLabel」、「levelLabel」、「foo1Label」という3つのラベルを作成しました。
「MakeRandomFoo」のメソッド(実装の下部)を示す前に、vcの定義と実装を示す必要があります。
// FooViewController.h
@class Foo;
@class FooController;
@interface FooViewController : UIViewController
@property (strong, nonatomic) Foo *foo;
@property (strong, nonatomic) FooController *fooController;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *levelLabel;
@property (weak, nonatomic) IBOutlet UILabel *foo1Label;
- (IBAction)randomizeButton;
// FooViewController.m
- (id)reloadView
{
self.nameLabel.text = self.pet.name;
self.levelLabel.text = [NSString stringWithFormat:@"%@",self.pet.level];
self.foo1Label.text = self.pet.foo1.name;
(remember when I told you about a property of foo1 called name?)
}
- (IBAction)randomizeButton
{
[self.petController makeRandomFoo:self.foo];
[self reloadView];
}
したがって、コードを実行してランダムボタンを押すと、名前とfoo1ラベルは空白のままになり、レベルラベルには(null)と表示されます。すべてのプロパティは合成されますが、私はそれらのカスタムセッターまたはゲッターを作成しませんでした。手伝ってくれませんか。
できるだけわかりやすく説明してみましたが、ご不明な点がございましたら、お気軽にお問い合わせください。