我已經聲明瞭一個名爲Squad的屬性,但是當我發送[self getSquad]時,我得到「SquadViewController沒有可見的@interface聲明選擇器'getSquad'」。爲什麼我的@property沒有自動獲取?
SquadViewController.h:
#import "FlipsideViewController.h"
#import "Squad.h"
@interface SquadViewController : UIViewController <FlipsideViewControllerDelegate, UIPopoverControllerDelegate>
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (strong, nonatomic) UIPopoverController *flipsidePopoverController;
@property (nonatomic, retain) IBOutlet UILabel *squadNameLabel;
@property Squad *squad;
- (IBAction)updateTitleWithName:(id)sender;
@end
SquadViewController.m:
#import "SquadViewController.h"
@interface SquadViewController()
@end
@implementation SquadViewController
@synthesize squadNameLabel;
@synthesize squad;
...
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
if (![self getSquad]) //<--THIS IS WHERE THE ERROR IS
{
[self setSquad:[Squad squadWithName:@"New Squad"]]; //<-- NOT HERE, SO THE SETTER SEEMS TO EXIST
}
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
...
我認爲 「@synthesize隊」 將產生getSquad和setSquad,所以我很困惑。
這裏是小隊的代碼,如果由於某種原因,我沒有得到它的相關(我是新的目標C,我仍然覺得它很混亂(我來自java背景)):
Squad.h:
#import "SquadBuilderObject.h"
@interface Squad : NSObject
@property NSString *name;
+ (id) squadWithName:(NSString*)name;
@end
Squad.m:
#import "Squad.h"
@implementation Squad
@synthesize name;
+ (id)squadWithName:(NSString *)name
{
Squad *newSquad = [[Squad alloc] init];
[newSquad setName:name];
return newSquad;
}
@end
Objective-C不使用'get'前綴,而是使用非特定模式的任何東西。你不應該用'get'作爲前綴。 – bbum