所以我有一個在Foo.h中定義的類,在Foo.m中實現。然後我有一個名爲FooController.h/m的控制器,它有多個方法將Foo與視圖對接。設置後,NSString屬性的值不會保留
美孚具有多個屬性,所以我只是要參考三種定義爲
// Foo.h
@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSNumber *level;
@property (strong, nonatomic) Foo1 *foo1;
正如你所看到的,富有階級Foo1這是我在其他地方所定義的屬性。我沒有完成Foo1的實現,但基本上它只是一組定義的更多屬性。 (?我沒有爲Foo1定義任何init方法莫非是個問題)Foo1的一個屬性,你應該留在你的腦海裏是:定義
// Foo1.h
@property (strong, nonatomic) NSString*name;
以下美孚方法:
// 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所具有的一種方法稱爲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;
}
然後在我的ViewController,FooViewController.h /平方米,我創建了一個名爲圓矩形按鈕「使隨機富」和三個標籤叫「nameLabel」,「levelLabel」「foo1Label」
之前我秀「讓隨機富」的方法(實現的底部),我應該只是展示我的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標籤保持空白並且級別標籤爲s ays(null)。 所有屬性都是合成的,但我沒有爲它們編寫自定義setter或getters。 你能幫我嗎?
我試着儘可能描述,但如果你有更多的問題,隨時提出問題!
我發現Foo和Bar的這些例子很難遵循。 Foo和Foo1看起來很殘酷。什麼是makeRandomFoo方法應該做的?爲什麼它將foo作爲參數,然後重新分配它?爲什麼它會返回一個foo,而你什麼也不做? – jrturton