Oscillatorエンティティを作る【実践的Macintoshプログラミング解説】

印刷用表示 |テキストサイズ 小 |中 |大 |

CoreData版 Repeating Motif Generator の開発 Repeating Motif Wonderland CoreData 実践的 Macintosh プログラミング解説

LinkIconホーム

更新日 2009-05-24

モデルを作る

Oscillatorエンティティを作る

OscillatorEntityPicture2.png まず最初に最もCoreDataらしい部分であるエンティティの設計から始めます。

 現実の世界でリサージュ図形を表示させるときは、オシロスコープをXYモードにしてそれぞれの入力に発振器をつなぎます。そこで、プログラムの方でも現実を模倣して、発振器を作る事にします。最初に作るエンティティは発振器を表すOscillatorエンティティです。

 完成したエンティティは、Xcodeのモデルエディタで右の様に表示されます。

新旧クラスの命名規則

OscillatorEntityList.png 旧バージョンのファイルを読み込むために旧クラスをプロジェクトに取り込む必要があるので、新クラスの名称はこれと重複しない様に決める必要があります。ここでは新クラスの名称は旧クラスの名称の末尾にCD(CoreDataの略)をつけるというルールを決めました。

 したがって新しいOscillatorのクラス名はOscillatorCDとなります。

 モデルエディタのエンティティパネル左下のプラスボタンをクリックして、エンティティを追加します。エンティティ名をOscillator、クラス名をOscillatorCDとします。

Oscillatorの属性

amplitude, frequency, phaseLag

  •  発振器出力を決める三つのパラメータは振幅(波の高さ)、周波数(波の数)、位相(波の位置)です。名前をそれぞれamplitude, frequency, phaseLagとします。
  •  これらはOscillatorのパラメータであり、ファイルに保存する必要があるのでOscillatorエンティティの属性とすべきです。

waveform

  •  waveformは上記のパラメータに対応する波形を表すパスです。これはファイルに保存しませんが、アンドゥには対応する必要があります。したがってOscillatorエンティティの属性とすべきです。ただし「一時」にチェックを入れてファイルに保存されない様にします。

属性を追加する

OscillatorProperty.png 上で決めた様にOscillatorエンティティに属性を追加します。 プロパティパネル左下のプラスボタンをクリックして属性を追加していくと、最終的に右の様になります。

 各属性の詳細設定は以下の様にしました。

amplitudeProperty.pngfrequencyProperty.png
phaseLagProperty.pngwaveformProperty.png

ソースコードを生成する

 RMGDocument.xcdatamodelを選択してモデルエディタを起動した状態で、Xcodeのファイルメニューから「新規ファイル…」を実行します。するとリストの最後に「管理オブジェクトクラス」が存在するので、これを選択して次へ進みます。

  • RMGDocument.xcdatamodelを選択していないと「管理オブジェクトクラス」が現れないので注意!

newFileAssistant.png

 次のページは変更する必要がないので、何もいじらずに次に進みます。

newFileAssistant2.png

 すると最後にエンティティを選択できるので、Oscillatorエンティティを選択します。下に三つのチェックボックスがありますが「アクセサを生成」だけをチェックしておきます。
 Obj-C 2.0を使うとTigerをサポートできなくなるので、ここでは選択しません。
 検証メソッドは実装を省略します。

newFileAssistant3.png

生成されたインターフェイスファイル

 「新規ファイル…」を実行して生成されたOscillatorCD.hは以下の様になりました。

 各プロパティに対応するアクセサメソッドの宣言が並んでいます。インスタンス変数は何もありません。

//
//  OscillatorCD.h
//  RepeatingMotifGenerator
//
//  Copyright 2008 NovemberKou. All rights reserved.
//

#import <CoreData/CoreData.h>


@interface OscillatorCD :  NSManagedObject  
{
}

- (NSNumber *)amplitude;
- (void)setAmplitude:(NSNumber *)value;

- (NSNumber *)frequency;
- (void)setFrequency:(NSNumber *)value;

- (NSNumber *)phaseLag;
- (void)setPhaseLag:(NSNumber *)value;

- (UNKNOWN_TYPE)waveform;
- (void)setWaveform:(UNKNOWN_TYPE)value;

@end

UNKOWN_TYPEを修正する

waveformProperty.png waveform属性のデータ型は「未定義」です。これのアクセサメソッドはUNKNOWN_TYPEというクラス名で生成されました。このままではコンパイル時にエラーになりますので、修正します。

 waveformは波形を表すオブジェクトで、NSBezierPathクラスのオブジェクトです。そこでUNKNOWN_TYPEをNSBezierPath *に置き換えます。



 インターフェイスファイルの修正は以上です。修正後はこうなります。

//
//  OscillatorCD.h
//  RepeatingMotifGenerator
//
//  Copyright 2008 NovemberKou. All rights reserved.
//

#import <CoreData/CoreData.h>


@interface OscillatorCD :  NSManagedObject  
{
}

- (NSNumber *)amplitude;
- (void)setAmplitude:(NSNumber *)value;

- (NSNumber *)frequency;
- (void)setFrequency:(NSNumber *)value;

- (NSNumber *)phaseLag;
- (void)setPhaseLag:(NSNumber *)value;

- (NSBezierPath *)waveform;
- (void)setWaveform:(NSBezierPath *)value;

@end