新旧クラスの命名規則
旧バージョンのファイルを読み込むために旧クラスをプロジェクトに取り込む必要があるので、新クラスの名称はこれと重複しない様に決める必要があります。ここでは新クラスの名称は旧クラスの名称の末尾にCD(CoreDataの略)をつけるというルールを決めました。
したがって新しいOscillatorのクラス名はOscillatorCDとなります。
モデルエディタのエンティティパネル左下のプラスボタンをクリックして、エンティティを追加します。エンティティ名をOscillator、クラス名をOscillatorCDとします。
Oscillatorの属性
amplitude, frequency, phaseLag
- 発振器出力を決める三つのパラメータは振幅(波の高さ)、周波数(波の数)、位相(波の位置)です。名前をそれぞれamplitude, frequency, phaseLagとします。
- これらはOscillatorのパラメータであり、ファイルに保存する必要があるのでOscillatorエンティティの属性とすべきです。
waveform
- waveformは上記のパラメータに対応する波形を表すパスです。これはファイルに保存しませんが、アンドゥには対応する必要があります。したがってOscillatorエンティティの属性とすべきです。ただし「一時」にチェックを入れてファイルに保存されない様にします。
属性を追加する
上で決めた様にOscillatorエンティティに属性を追加します。 プロパティパネル左下のプラスボタンをクリックして属性を追加していくと、最終的に右の様になります。
各属性の詳細設定は以下の様にしました。
![]() | ![]() |
![]() | ![]() |
ソースコードを生成する
RMGDocument.xcdatamodelを選択してモデルエディタを起動した状態で、Xcodeのファイルメニューから「新規ファイル…」を実行します。するとリストの最後に「管理オブジェクトクラス」が存在するので、これを選択して次へ進みます。
- RMGDocument.xcdatamodelを選択していないと「管理オブジェクトクラス」が現れないので注意!

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

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

生成されたインターフェイスファイル
「新規ファイル…」を実行して生成された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を修正する
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

ホーム



前へ