2015-09-19 48 views
1

我试图创建一个属性为getter - 暂时我只是用的方法从静态数组建立一个NSMutableObject但最终这些都将是动态的配置设置。在以前的应用程序,从getter and setters not working objective c我这样做:自吸气不叫目标C

#import "ViewController.h" 

@interface ViewController() 

@property (nonatomic) NSMutableDictionary *questions; 

@end 

@implementation ViewController 

- (void)viewDidLoad { 

    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    [[self questions] setValue:@"FOO" forKey:@"bar"]; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

+ (NSMutableDictionary *)questions 
{ 
    static NSMutableDictionary *_questions; 
    if (_questions== nil) 
    { 
     NSArray *genders = @[@"male", @"female"]; 
     NSArray *ages = @[@"<10", @">60", @"Other"]; 
     _questions = [[NSMutableDictionary alloc] init]; 
     [_questions setValue:genders forKey:@"gender"]; 
     [_questions setValue:ages forKey:@"age"]; 

    } 

    return _questions; 
} 

当我在viewDidLoad中的线,我尝试使用“问题”属性,它不使用自定义的吸气剂(它只是分配栏:FOO到零字典)。我错过了什么?

回答

1

尝试改变

+ (NSMutableDictionary *)questions 

- (NSMutableDictionary *)questions 

您可能还需要返回类型更改为NSDictionary *防止静态变量被突变,或返回_questions.copy_questions.mutableCopy

1

您的自定义questions方法并非通过setValue:forKey:调用的原因是,它是一个类的方法:

+ (NSMutableDictionary *)questions是在ViewController类中定义的方法,而属性访问器(其setValue:forKey:正在寻找)是在实例上定义。

要访问您的自定义的方法,因为它是目前定义调用类的方法:

[[[self class] questions] setValue:@"FOO" forKey:@"bar"];

这可能没有你想让你的影响,因为该值将整个类的所有实例共享。

+0

事实上,我怀疑操作系统的意图是使它成为一个实例方法:'(NSMutableDictionary *)questions'(将领先的“+”改为“ - ” –