[英]Custom getter not called in Objective C
我正在嘗試為屬性創建一個吸氣劑-暫時,我只是在使用從靜態數組構建NSMutableObject的方法,但最終這些將是動態配置設置。 在以前的應用中,由於getter和setter方法無法正常工作,因此我做到了:
#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;
}
當我到達試圖使用'questions'屬性的viewDidLoad中的行時,它沒有使用自定義的getter(它只是將bar:FOO分配給nil字典)。 我想念什么?
您的自定義questions
方法未通過setValue:forKey:
調用的原因是它是一個類方法:
+ (NSMutableDictionary *)questions
是在ViewController
類上定義的方法,而屬性訪問器(正在尋找setValue:forKey:
的對象)是在實例上定義的。
要訪問您當前定義的自定義方法,請調用類方法:
[[[self class] questions] setValue:@"FOO" forKey:@"bar"];
這可能不會達到您想要的效果,因為此值將在該類的所有實例之間共享。
嘗試更改
+ (NSMutableDictionary *)questions
至
- (NSMutableDictionary *)questions
您可能還希望將返回類型更改為NSDictionary *
以防止靜態變量發生突變,或者返回_questions.copy
或_questions.mutableCopy
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.