Tôi đang cố gắng thêm một số chức năng tập lệnh vào ứng dụng Cocoa mà tôi đã viết. Tôi đã tạo một sdef (Tệp Định nghĩa Tập lệnh) cho dự án của tôi. Cho đến nay tôi đã thành công trong việc tiếp cận đối tượng trẻ em (yếu tố) với AppleScript nhưng tôi không thể cho cuộc sống của tôi tìm ra cách gọi phương thức (lệnh).Xác định và thực thi các lệnh AppleScript đơn giản trong ứng dụng Cocoa
Đây là tệp sdef của tôi.
<suite name="mySuite" code="mSUI" description="My Application Suite">
<class name="application" code="capp" description="Top level scripting object.">
<cocoa class="NSApplication"/>
<!-- I can access these elements fine -->
<element description="Test children." type="child" access="r">
<cocoa key="myChildren"/>
</element>
<!-- Cannot seem to call this method :(-->
<responds-to command="testmethod">
<cocoa method="exposedMethod:"/>
</responds-to>
</class>
<class name="child" code="cHIL" description="A Child." plural="children">
<cocoa class="Child"/>
<property name="name" code="pnam" description="The child name." type="text" access="r">
<cocoa key="name"/>
</property>
</class>
<command name="testmethod" code="tEST" description="Execute the test method" />
</suite>
Dưới đây là triển khai lớp điều khiển của tôi (đây là các đại biểu của ứng dụng của tôi)
MyController.h
#import <Cocoa/Cocoa.h>
@interface MyController : NSObject {
NSMutableArray* myChildren;
}
// Some Methods
@end
MyController + Scripting.m
#import "MyController+Scripting.h"
@implementation MyController (Scripting)
// This works when I'm accessing the myChildren
- (BOOL)application:(NSApplication*)sender delegateHandlesKey:(NSString*)key {
NSLog(@"Key = %@", key);
return ([key isEqualToString:@"myChildren"]);
}
// This does NOT work...
- (void)exposedMethod:(NSScriptCommand*)command {
NSLog(@"Invoked Test Script Method %@", [command description]);
}
@end
Cuối cùng, AppleScript tôi đang cố gắng là:
tell application "MyApplication"
testmethod
end tell
mà trả lời với "AppleScript Error - The variable testmethod is not defined."
Bất kỳ ý tưởng những gì tôi đang làm sai ở đây? Tôi cảm thấy như tôi đang thiếu một cái gì đó đơn giản nhưng Googling của tôi dường như không được bật lên bất cứ điều gì hữu ích.
Có lẽ tôi đang thiếu thứ gì đó, nhưng đây có phải là ứng dụng Cocoa (OS X) hoặc ứng dụng Cocoa Touch (iPhone) không? Ứng dụng iPhone không hỗ trợ AppleScript. – sbooth
Người hỏi đã làm rõ rằng UIController là tên (được chọn kém) của một bộ điều khiển ứng dụng tùy chỉnh/lớp đại biểu, vì vậy tôi đã cập nhật mã để loại bỏ nhầm lẫn. –
Bạn đã tìm thấy giải pháp chưa? Tôi có cùng một vấn đề .. – Dmitry