Как передать NSMutableDictionary в качестве ссылки? - PullRequest
0 голосов
/ 30 мая 2019

У меня есть следующие настройки в одном из моих классов, где я передаю NSMutableDictionary в качестве параметра инициализатору, а затем присваиваю его переменной controls.

Я считаю, что поведение заключается в копировании элементов NSMutableDictonary в controls, но мне нужно передать его как ссылку, чтобы сделанные изменения отражались в классе, передающем словарьдо MenuViewCell.Это всегда сбивает меня с толку, как я могу передать NSMutableDictionary в качестве ссылки?

MenuViewCell.h

@interface MenuViewCell : UITableViewCell
{
    NSMutableDictionary *_controls;
}
@property(nonatomic, copy) NSMutableDictionary *controls;

MenuViewCell.m

@synthesize controls = _controls;

- (id)initWithControls:(NSMutableDictionary *)controls 
{
    self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
    if (self)
    {
        self.controls = controls;
    }
    return self;
}

- (void) setControls:(NSMutableDictionary *)controls
{
    if (_controls != controls)
    {
        _controls = [controls mutableCopy];
    }
}

1 Ответ

0 голосов
/ 30 мая 2019

Ваша проблема - использование copy в свойстве и использование mutableCopy в установщике.Сделайте свойство strong.

Вам также не нужно @synthesize или явная переменная экземпляра.

MenuViewCell.h

@interface MenuViewCell : UITableViewCell

@property(nonatomic, strong) NSMutableDictionary *controls;

MenuViewCell.m

- (id)initWithControls:(NSMutableDictionary *)controls 
{
    self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
    if (self)
    {
        _controls = controls;
    }
    return self;
}

Нет необходимости переопределять сеттер.

...