macOS/iOS API解説

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。2010年代に書かれた内容です。今後更新はありません。

目次

initWithEventClass:eventID:targetDescriptor:returnID:transactionID:

記述タイプとプロセス番号でアップルイベントデスクリプタを初期化して返します
-(id)initWithEventClass:(AEEventClass)eventClass:
               eventID:(AEEventID)eventID:
               targetDescriptor:(NSAppleEventDescriptor *)addressDescriptor:
               returnID:(AEReturnID)returnID:
               transactionID:(AEtransactionID)transactionID:

解説

指定した記述タイプ(descType)とプロセス番号でアップルイベントデスクリプタオブジェクトを初期化して返します。クリエータタイプ(typeAppleSignature)を渡す方法では、イベントを送信することができません。(10.2)
【descType】AppleEvent送付先を指定するタイプ
● typeAppleSignature アプリケーションのクリエータタイプ
● typeProcessSerialNumber プロセスのシリアル番号
   {0,kNoProcess}存在しない
   {0,kSystemProcess}システムプロセス
   {0,kCurrentProcess}現在のプロセス
● typeSessionID セッションID
● typeTargetID ターゲットID

返り値

( id )

アップルイベントデスクリプタ

引数

( AEEventClass )eventClass

イベントクラス

( AEEventID )eventID

イベントID

( NSAppleEventDescriptor * )addressDescriptor

アドレスデスクリプタ

( AEReturnID )returnID

リターンID

( AEtransactionID )transactionID

トランザクションID

クラス

NSAppleEventDescriptor

Instance Methods

使用可能

10.0

参照

例文

#import "MyObject.h"

@implementation MyObject

- (IBAction)myAction:(id)sender
{
RequestSystemRestart();

}

//リスタートする
static BOOL RequestSystemRestart()
{
    OSStatus status = noErr;
    const ProcessSerialNumber systemPsn = { 0, kSystemProcess };//アプリのプロセスナンバー
    
    //ターゲットを作る
    NSAppleEventDescriptor* targetDesc = [NSAppleEventDescriptor
        descriptorWithDescriptorType: typeProcessSerialNumber
        bytes: &systemPsn
        length: sizeof(systemPsn)
    ];
    //イベントを作る
    NSAppleEventDescriptor* restartEvent = [[NSAppleEventDescriptor alloc]
        initWithEventClass: kCoreEventClass
        eventID: kAEShutDown//
        targetDescriptor: targetDesc
        returnID: kAutoGenerateReturnID
        transactionID: kAnyTransactionID
    ];

    //AppleEvent送信
    status = AESendMessage(
        (const AppleEvent*)[restartEvent aeDesc],
        NULL,
        kAENoReply | kAECanSwitchLayer | kAEAlwaysInteract,
        kAEDefaultTimeout
    );

    return (status == noErr);
}

@end