2013-02-27 5 views
8

Xcodeの新機能で、iOSプロジェクトで作業していて、最も基本的なデバッグに時間を費やしています。具体的には、私はコードをステップ実行するときにオブジェクトの状態を見ることができる必要があります(それは狂っていませんか?)。しかし、私の人生にとってXcodeでこれを行う方法を理解することはできません。デバッグ中にXcodeでオブジェクト/プロパティの状態を表示

私が試したときはいつでも、目的の内容を表示するために拡張することができないメモリアドレスが得られます。また、オブジェクトの状態を表示するために、デバッグコンソールでポインタを手動で参照解除する方法もありません。

ここでは、store.storeHoursアレイの内容を確認しようとしていますが、運がまったくありません。実際、左側のビューには配列に0個のオブジェクトがあり、展開しようとすると何も表示されませんが、po store.storeHoursには7個のオブジェクトが表示されますが、メモリアドレスとして無駄に描写されます。

enter image description here

私はクレイジーじゃないと私は何かが欠けてる教えてください!

更新日:だから、物事はさらに奇妙になる!突然 "Auto"の代わりに "Local"に変わるディスプレイを切り替えると、self.store.storeHoursは完全にナビゲート可能になります!私は今、それを表示するときに配列内の7つのオブジェクトを明確に識別しているので、正しい「storeHours」インスタンスまたは何かにアクセスするグリッチがあったのだろうかと思います!私が元々望んでいたので、オブジェクトは拡張可能です。

enter image description here

+0

'Hours'はカスタムクラスですか? –

+0

はい............ – devios1

答えて

8

のインスタンスは、実際にその情報そのものを提供しています。カスタムクラスではNSObjectから継承されたdescriptionメソッドを実装して、メモリアドレス以外のものとして自分自身を印刷できるようにする必要があります(これはNSObjectの実装と同じです)。

私はあなたのHoursクラスが持っているものの性質さっぱりだが、これはのようなものと同じくらい簡単です:

- (NSString *)description 
{ 
    return [NSString stringWithFormat:@"Open: %i Close: %i", self.openTime, self.closeTime]; 
} 

方法は、ちょうどあなたがしたときに表示することが重要だと思うものは何でも情報含むNSStringを返す必要がありますオブジェクトを検査する。

これは、NSLog()%@フォーマット指定子を使用すると、クラス自体を表す方法です。

+0

これは間違いなく始まりです。 Hourオブジェクトが何であるかを少なくとも見ることができます。残念ながら、デフォルトのNSObject実装では、プロパティと値を汎用的に再帰的に表示することはできません。私はObj-Cがこの種のものには低レベルすぎると思う。 – devios1

+1

ランタイムライブラリにはイントロスペクション機能があります。したがって、オブジェクトが何であっても、オブジェクトのすべてのプロパティを吐き出すことは実際には実現可能です:http://www.google.com/search?q=site:stackoverflow.com+ -site:meta.stackoverflow.com + objective-c + print + all + properties + of + an +オブジェクト –

+2

@chaiguyは、適切なイントロスペクション(kendall-helmstetter-gelner)を求めて); http://stackoverflow.com/a/2304797/91282 – Till

0

はあなたの例では

-(NSString*)description{ 
    //Return a string in whatever way you like to describe this instance. That is what xcode debugger reads. 
    //This is implemented in the parent to return the address, that's why you see that way. 
} 
+1

この回答を少し拡大できますか? – thomasrutter

1

を実装し、store.storeHoursは空にNSArrayです。だから当然、内部を見ることはできません。

は、デバッガで、より明確にするために、あなたはその内容についての詳細を伝える Hoursのようなあなたのオブジェクトに(NSObjectのから継承)メソッド

- (NSString*) description 

を追加してみてください。 debugDescriptionも参照してください。

+0

これは私が思っていたものですが、空ではなく、デバッグ時にfor..inループが7つのオブジェクトを反復しますが、明示的に 'po' storeHoursを除いて7つのオブジェクトがあることはわかりませんコンソールでとても混乱するような。 – devios1

+0

最新版のXcode、@chaiguyはありますか? LLDBは、イヴァールを見ることに関して最初は少しバギーだった。 –

+0

それは私が考える最新のものです(4.5.2(4G2008a))。コンソールは(gdb)と言いますが、それはおそらく私がLLDBを使用していないことを意味しますか? – devios1

関連する問題