Странное поведение с NSLog
Я использую NSLog для проверки UITextView. В моем коде есть следующие операторы ведения журнала:
NSLog(@"textView: %@",textView);
NSLog(@"textView.frame: %@",textView.frame);
NSLog(@"[textView frame]: %@",[textView frame]);
И в выводе на консоль я получаю следующее:
2010-11-29 22:00:38.252 MenuMaker[57602:207] textView: <UITextView: 0x3b3afe0; frame = (0 0; 320 387); text = 'blah...'; clipsToBounds = YES; autoresize = RM+BM; layer = <CALayer: 0x3b3afa0>>
2010-11-29 22:00:38.254 MenuMaker[57602:207] textView.frame: (null)
2010-11-29 22:00:38.254 MenuMaker[57602:207] [textView frame]: (null)
Первая строка вывода, так как она содержит бит 'frame = (0 0; 320 387), приводит меня к мысли, что переменная кадра UITextView настроена. Но почему следующие две строки показывают нуль в этом случае? Не должны ли они сбрасывать значения фрейма?
Заранее спасибо
Ответы
Ответ 1
Как отмечали другие, CGRect является просто структурой и, следовательно, не имеет метода -description (который является тем, что статический метод + stringWithFormat NSString, используемый NSLog, заменяет% @в строке формата). Поэтому вы не можете напрямую передать его NSLog.
Однако нет необходимости выводить какие-либо значения отдельно, например, предлагаемые. Cocoa предоставляет ряд встроенных методов, которые преобразуют несколько структур Core Graphics в строку:
NSStringFromCGRect()
NSStringFromCGPoint()
NSStringFromCGSize()
NSStringFromCGAffineTransform()
И так далее. Поэтому вывод CGRect в виде строки становится сверхлегким:
NSLog(@"%@", NSStringFromCGRect(rect));
Вы можете найти все эти вспомогательные методы здесь в разделе "Преобразования строк".
Ответ 2
Вы также можете сделать, например, ниже
NSLog(@"%@",[NSValue valueWithCGRect:textView.frame]);
Ответ 3
UIView.frame
- это просто CGRect
struct (который по очереди содержит CGPoint
и CGSize
struct).
Таким образом, классы не задействованы, и поскольку только классы могут иметь строковое представление, вы можете отобразить null
. Что вы должны сделать, если хотите, чтобы значения фрейма были примерно такими:
NSLog(@"textView.frame origin: %f %f", textView.frame.origin.x, textView.frame..origin.y);
NSLog(@"textView.frame size: %f %f", textView.frame.size.width, textView.frame.size.height);
Ответ 4
TextView. frame вернет значение CGRect. Поэтому, если вы хотите знать значения фрейма textView
NSLog(@"textView frame height: %f",textView.frame.size.height);
NSLog(@"textView frame width: %f",textView.frame.size.width);
NSLog(@"textView frame x Position: %f",textView.frame.origin.x);
NSLog(@"textView frame y Position: %f",textView.frame.origin.y);
NSLog будет считать это значение равным null, если он не распознает объект, который получил.
Ответ 5
В Swift это просто:
println("\(textView.frame)")