カスタム·タイプのクイックルックを有効にする
Xcode のデバッガでの変数のクイックルック機能を使用すると、グラフィカルなレンダリングを介して、オブジェクト変数の状態を素早く視覚的な評価を得ることができ、デバッガの変数表示またはソースコード内その場でのどちらでポップオーバーウインドウに表示されます。サポートされる OS のタイプについては、クイックルックを表示してデバッガのクイックルックオブジェクトは、この初期の可視化サービスを提供します。
この章では、これらの型のオブジェクト変数もクイックルックポップオーバーウインドウで視覚的にレンダリングすることができるように、カスタムクラスタイプに対してクイックルックメソッドを実装する方法について説明します。
クイックルックのメソッドを実装
カスタムクラスタイプの場合は、debugQuickLookObject という名前のメソッドを実装します。
- (id)debugQuickLookObject { // allocate the return object for the data you wish to represent // Note: "NSImage" is used here arbitrarily for illustration purposes. NSImage *_quickLookImage = [...] // code that draws a representation of the variable state // ... // return the object return _quickLookImage; }
レンダリングの視覚化のための有用な最も一般的な OS のタイプのセットは、Xcode がクイックルックの表示用に使用するデバッガのクイックルックの初期のオブジェクトを出力することができます。debugQuickLookObject メソッドは、これらのタイプのいずれかのオブジェクトを返す必要があります。カスタム型をレンダリングするために最も適切なものを選ぶことができ、OS の種類とその標準のクイックルック表示例の表は、debugQuickLookObject をサポートする OS の種類 を参照してください。
カスタムクラス型の変数は、Xcode のデバッガ変数ビューで選択されており、クイックルックを使用する場合は、オブジェクトの debugQuickLookObject メソッドが呼び出されます。それが返すものはどんなオブジェクトでもクイックルックポップオーバー表示で表わされます。
注意点
debugQuickLookObject メソッドは、デバッガで実行されるため、一時停止中のアプリケーション内で、可能な限り最も経済的なメソッドです。便利な視覚的なグラフィックとして変数の状態を表すために、必要な限り小さなコードを記述します。一時停止中のアプリケーションのコードを実行すると、副作用が出るかもしれないことを覚えておいてください。可能であれば、戻したい項目をキャッシュします。
サンプルでの実装
MyCustomClass というありふれた名前で定義されたカスタム型のインスタンスがデバッガでクイックルックで表示されたときに、次の debugQuickLookObject メソッドが呼び出されます。オブジェクト·タイプは、次のように宣言されます:
#import <Foundation/Foundation.h> @interface MyCustomClass : NSObject @end
MyCustomClass.m の中で、debugQuickLookObject メソッドはただクイックルックのためのグラフィックをまさしく描画し、NSImage オブジェクトの中にそれを返します。
- (id)debugQuickLookObject { // Note that for simplicity in presentation, this sample //allocates and returns an NSImage object. // Using a cached object instead is preferred; it minimizes potential // impact on the paused app context. NSImage *image = [NSImage imageWithSize:QUICK_LOOK_IMAGE_SIZE flipped:NO drawingHandler:^BOOL(NSRect dstRect) { CGFloat midX = NSMidX(dstRect); CGFloat midY = NSMidY(dstRect); NSUInteger numCircles = 5; CGFloat circleSpacing = -10.0; CGFloat circleRadius = 20.0; CGFloat circleDiameter = circleRadius * 2; CGFloat stride = circleDiameter + circleSpacing; CGFloat currentCircleX = midX - (stride * numCircles)/2.0; NSColor *strokeColor = [NSColor colorWithCalibratedRed:0.10 green:0.41 blue:1.0 alpha:1.0]; NSColor *fillColor = [strokeColor colorWithAlphaComponent:0.15]; for (NSUInteger i=0; i < numCircles; i++) { NSRect circleRect = NSMakeRect(currentCircleX, midY - circleRadius, circleDiameter, circleDiameter); NSBezierPath *circlePath = [NSBezierPath bezierPathWithOvalInRect:circleRect]; [fillColor set]; [circlePath fill]; [strokeColor set]; [circlePath stroke]; currentCircleX += stride; } return YES; }]; return image; }
Xcode のデバッガで debugQuickLook メソッドをテストするために、アプリのプロジェクトを作りました。MyCustomClass.h インターフェイスと MyCustomClass.m 実装ファイルをそれに加えました。次のコードは AppDelegate.m ファイルに挿入しました。NSLog() で設定したブレークポイントは、の呼び出しが返された myObject カスタムクラス変数でクイックルックできます。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { MyCustomClass *myObject = [self _createMyCustomObject]; NSLog(@"created object"); // set breakpoint here, and Quick Look myObject } - (MyCustomClass *) _createMyCustomObject { MyCustomClass *customObject = [[MyCustomClass alloc] init]; return customObject; }
結果のクイックルック表示を図1-1に示します。
図1−1「クイックルック」でカスタムタイプの表示
前の章
次の章