簡體   English   中英

在目標C中未調用自定義吸氣劑

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM