возможно ли nslog c структуры (как cgrect или cgpoint)?

<p>я хочу иметь возможность отлаживать структуры c без необходимости явно вводить каждое свойство, из которого они состоят.</p><p>я хочу иметь возможность сделать что-то вроде этого:</p><pre><code>cgpoint cgpoint = cgpointmake(0,0); nslog(@"%@",cgpoint); </code></pre><p>очевидно, что "% @" не будет работать, поэтому вопрос.</p>

<p>вы можете попробовать это:</p><pre><code>nslog(@"%@", nsstringfromcgpoint(cgpoint)); </code></pre><p>существует ряд функций <a href="http://developer.apple.com/library/ios/documentation/uikit/reference/uikitfunctionreference/reference/reference.html#//apple\_ref/doc/uid/tp40006894-ch3-sw34">предоставляемых uikit</a> , которые преобразуют различные структуры cg в <code>nsstring</code>s. причина, по которой это не работает, заключается в том, что <code>%@</code> обозначает объект. <code>cgpoint</code> является структурой c (как и <code>cgrect</code>s и <code>cgsize</code>s).</p>

<p>есть несколько функций, таких как:</p><pre><code>nsstringfromcgpoint nsstringfromcgsize nsstringfromcgrect nsstringfromcgaffinetransform nsstringfromuiedgeinsets </code></pre><p>пример:</p><pre><code>nslog(@"rect1: %@", nsstringfromcgrect(rect1)); </code></pre>

<pre><code>nslog(@"%@", cgrectcreatedictionaryrepresentation(rect)); </code></pre>

<p>я использую следующий макрос, чтобы помочь мне с nsrect:</p><pre><code>#define logrect(rect) nslog(@"%s: (%0.0f, %0.0f) %0.0f x %0.0f", #rect, rect.origin.x, rect.origin.y, rect.size.width, rect.size.height) </code></pre><p>вы можете сделать что-то подобное для cgpoint:</p><pre><code>@define logcgpoint(point) nslog(@"%s: (%0.0f, %0.0f)", #point point.x, point.y); </code></pre><p>используя это следующим образом:</p><pre><code>logcgpoint(cgpoint); </code></pre><p>будет производить следующее:</p><pre><code>cgpoint: (100, 200) </code></pre>

<p>вы можете использовать <code>nsvalue</code> для этого. объект <strong>nsvalue</strong> - это простой контейнер для одного элемента данных c или objective-c. он может содержать любой из скалярных типов, таких как int, float и char, а также указатели, структуры и идентификаторы объектов.</p><p><strong>пример:</strong></p><pre><code> cgpoint cgpoint = cgpointmake(10,30); nslog(@"%@",[nsvalue valuewithcgpoint:cgpoint]); </code></pre><p><strong>результат:</strong> <code>nspoint: {10, 30}</code></p><p>надеюсь, это поможет вам.</p>

<p>поскольку сломанный rss в stack overflow только что воскресил для меня этот вопрос, вот мое почти общее решение: <a href="https://github.com/jensayton/javaluetostring">javaluetostring</a> </p><p>это позволяет вам писать <code>ja\_dump(cgpoint)</code> и регистрировать <code>cgpoint = {0, 0}</code>.</p>

<p>да, вы можете использовать ниже несколько функций, таких как: сначала вы должны преобразовать структуру cgpoint в строку, см. пример</p><pre><code>1) nsstringfromcgpoint, 2) nsstringfromcgsize, 3) nsstringfromcgrect, 4) nsstringfromcgaffinetransform, 5) nsstringfromuiedgeinsets, </code></pre><p>например:</p><pre><code>1) nslog(@"nsstringfromcgpoint = %@", nsstringfromcgrect(cgpointvalue)); </code></pre><p>как это...</p>

<pre><code>nslog(@"%@",cgrectcreatedictionaryrepresentation(rect)); </code></pre>