スクリプト可能にしようとしているココア アプリケーションがあります。NSArray プロパティを含むモデル クラス (NSObject のサブクラス) があり、別のクラスの多数のカスタム "Element" オブジェクトを保持します。モデル クラスの配列プロパティは、そのクラスの外では必要ない (したがって、NSApplication のサブクラス/カテゴリに含めたくない) ため、このアプリケーションのこの設計パターンが気に入っています。ただし、スクリプト可能な Cocoa アプリケーションを作成するために私が見たすべての例では、最上位のスクリプト オブジェクトは、公開されたデータをプロパティまたは要素として含む NSApplication のサブクラスまたはカテゴリです。
対照的に、NSApplication にはプロパティもメソッドもありません。簡単な例として、以下のコードを参照してください (私のプロジェクトの DataModel.h/DataModel から):
#import <Foundation/Foundation.h>
#import "Element.h"
@interface DataModel : NSObject
@property (nonatomic) NSArray *elements;
@end
@implementation DataModel
@synthesize elements = _elements;
- (id)init {
if (self= [super init]) {
Element *element1 = [[Element alloc] init];
element1.elementName = "first element";
element1.elementNumber = "22";
Element *element2 = [[Element alloc] init];
element2.elementName = "second element";
element2.elementNumber = "24";
self.elements = [NSArray arrayWithObjects:element1, element2, nil];
}
return self;
}
@end
およびこのコード (Element.h/Element.m の場合 - ViewController の「要素」NSArray に格納されているオブジェクト:
#import <Foundation/Foundation.h>
@interface Element : NSObject {
}
@property (nonatomic) NSString *elementName;
@property (nonatomic) NSString *elementNumber;
@end
#import "Element.h"
@implementation Element
@synthesize elementName = _elementName, elementNumber = _elementNumber;
@end
データ モデルが独自のクラスである場合、sdef ファイルで「要素」をアクセス可能なプロパティにするにはどうすればよいですか? DataModel または Element クラスにオブジェクト指定子が必要ですか? この場合、NSApplication にはプロパティ、要素、またはコマンドは含まれません。
ありがとう!