Cocoa 응용 프로그램에서 새 앨범을 만들려고 머리가 찢어지고 있습니다. AppleScript로 그것은 좋은 간단한 절차입니다 :Cocoa Scripting Bridge를 사용하여 iPhoto 앨범 만들기
tell application "iPhoto"
new album name "Album"
end tell
하지만이 스크립팅 다리를 통해 코코아에서 수행되는 방법을 작동하지 않을 수 있습니다. 나는 이것을 시도했다 :
iPhotoApplication *iPhoto = [SBApplication applicationWithBundleIdentifier:@"com.apple.iPhoto"];
iPhotoAlbum *newAlbum = [[[[iPhoto classForScriptingClass:@"album"] alloc] initWithProperties:[NSDictionary dictionaryWithObject:@"Album" forKey:@"name"]] autorelease];
[[iPhoto albums] addObject:newAlbum];
그러나 그것은 아무런 효과가 없었다.
도와주세요!
답변 해 주셔서 감사합니다. sdp가 헤더 파일을 잘못 생성 한 것 같습니다. 아마도 "새 앨범"이 클래스에 없기 때문일 것입니다. appscript가 배후에서 어떻게 보이는지 살펴 보겠습니다. D – robinjam
iPhoto의 사전은 잘못 설계되었지만'new album' 명령의 구조와 사용법은 완벽하게 유효합니다. iTune의'play' 명령과는 다른 합법적 인 예입니다. sdp와 SB는 응용 프로그램 사전 정의 명령을 동일한 방식으로 ObjC 메서드로 변환하지 않습니다. 그것은 정말 기본적인 버그입니다. – has
AppScript는 AppleScript가 작동하는 방식을 모방하여 호스트 언어의 기능에 맞게 조정되었습니다. ObjC 메소드는 선택적 arg를 수행하지 않기 때문에 일련의 체인 메소드 호출을 사용하여 명령 ('-newAlbum')을 작성하고 각 매개 변수 ('-name :')를 압축 한 다음 마지막으로 ('-send') . 이것은 원래의 Carbon C API ('AECreateAppleEvent','AEPutParamDesc','AESendMessage')를 사용하여 애플 이벤트를 만들고 보내는 방식과 매우 흡사하며 그 호출에 어느 정도 직접적으로 매핑됩니다. – has