Получение значений из NSValue, созданного с использованием sizeWithAttributes

У меня есть NSValue, которое я возвращаю из NSDictionary. NSValue был создан с использованием sizeWithAttributes. Я хотел бы знать, как вернуть NSValue обратно в значение, где я могу использовать его для создания размера метки.

Я получаю размер метки, рассчитанный из этого

betweensLabelSize = [betweensString sizeWithAttributes: @{
                      NSFontAttributeName: [UIFont systemFontOfSize:14.5f]
                }];

Я помещаю это в NSDictionary как NSValue и получаю вот так

NSValue *tempSize = [currAxisDictionary objectForKey:@"betweensLabelSize"];

который возвращает это значение

NSSize: {64.278503, 86.4925}

person HurkNburkS    schedule 30.11.2014    source источник


Ответы (2)


Чтобы было ясно, вы предположительно создали NSValue, используя +[NSValue valueWithCGSize:]. -sizeWithAttributes: не создавал NSValue; он вернул CGSize, который вы завернули в NSValue.

В любом случае, вы можете получить CGSize из объекта NSValue, вызвав для него -CGSizeValue:

CGSize size = [tempSize CGSizeValue];
person Ken Thomases    schedule 30.11.2014
comment
хорошо, спасибо за ответ, я сейчас изучаю его, но не уверен на 100%, как использовать CGSizeValue - person HurkNburkS; 01.12.2014
comment
Я обновил свой ответ, чтобы показать, как метод CGSizeValue будет использоваться для получения CGSize из объекта NSValue, на который указывает tempSize. - person Ken Thomases; 01.12.2014
comment
Это сработало, спасибо. Я никогда раньше не использовал CGSizeValue - person HurkNburkS; 01.12.2014

Попробуйте ниже код для доступа к значению размера: -

NSValue *val=[mut objectForKey:@"betweensLabelSize"];
CGSize sz=val.CGSizeValue;
person Hussain Shabbir    schedule 30.11.2014
comment
Пожалуйста, укажите причину понижения голоса. Так что это исправит ответ. - person Hussain Shabbir; 01.12.2014
comment
Извините, но все в вашем ответе неверно. Строка OP для получения NSValue tempSize из словаря просто прекрасна. Он не возвращает CGSize, он возвращает NSValue. Предложенное вами решение потерпит крах. Цель OP — извлечь значение CGSize из NSValue. См. документы для NSValue для простого способа сделать это. - person rmaddy; 01.12.2014
comment
NSValue не имеет свойства с именем sizeValue. Возможно, вы хотели использовать метод CGSizeValue. - person rmaddy; 01.12.2014
comment
Правильно, что только я имел в виду - person Hussain Shabbir; 01.12.2014