Visibilité des classes dans la procedure performDefaultImplementation
Hello,
I have written an application running under Mac OsX 10.8 and now I want to drive this app through Apple Script
I have validated my app as scriptable and constructed the suite within a.sdef file, and when I send a command through appleScript editor, I reach the right class (for me SolarMaxAppleEvent class) and process performDefaultImplementation method, which returns a NSString.
This class has been intanciated by my app which fills in an array (NSMutableArray * AppleEventUpsArray) of Dictionaries (NSMutableDictionary * appleEventUpsDict) which I want to use in AppleScript Answer.
In order to fill in this string, I need to acces to this AppleEventUpsArray property in performDefaultImplementation method.
But running inside this method (with debug) it seems, that I cannot access to the same instance than in the app.
How can I access within performDefaultImplementation method to the properties of this class?
Sample code follows:
file: SolarMaxAppleEvent.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @interface SolarMaxAppleEvent : NSScriptCommand {
@public NSMutableArray *AppleEventUpsArray;
@public NSMutableDictionary *appleEventUpsDict;
}
- (id)performDefaultImplementation;
@property (nonatomic, retain) NSMutableArray *AppleEventUpsArray;
@property (nonatomic, retain) NSMutableDictionary *appleEventUpsDict;
@end |
file: SolarMaxAppleEvent.m
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| @implementation SolarMaxAppleEvent
@synthesize AppleEventUpsArray;
@synthesize appleEventUpsDict;
- (id)init {
int i;
if (self = [super init]) {
// NSLog(@"SolarMaxAppleEvent init ");
self.AppleEventUpsArray = [[NSMutableArray alloc] init];
for (i=0 ; i< 3 ; i++) {
appleEventDict = [[NSMutableDictionary alloc] init];
appleEventDict = [NSMutableDictionary dictionaryWithObjectsAndKeys:
[NSDate date], @"Date", [NSNumber numberWithInteger: 0 ], @"numPort",
[NSNumber numberWithInteger: 0 ],@"UAC" ,
[NSNumber numberWithInteger: 0 ],@"PAC" ,
[NSNumber numberWithInteger: 0 ],@"Temp",
[NSNumber numberWithInteger: 0 ],@"UDC" ,nil ];
[self.AppleEventUpsArray addObject: appleEventDict];
[appleEventDict release];
}
NSLog(@"SolarMaxAppleEvent init AppleEventUpsArray : %@ ",AppleEventUpsArray);
// at this point This AppleEventUpsArray is correctly filled with 3 objects
}
return self;
}
- (id) performDefaultImplementation {
id currentEventArray;
NSDictionary * theArguments = [self evaluatedArguments];
NSString *theResult;
SLOG(@"CommandWithArgs performDefaultImplementation");
/* report the parameters */
SLOG(@"The direct parameter is: '%@'", [self directParameter]);
SLOG(@"The other parameters are: '%@'", theArguments); // I clearly see this Log within console wiyh the rignt arguments
currentEventArray = self.AppleEventUpsArray;
theResult = [NSString stringWithFormat:@"'%@'", [self.currentEventArray count]];
// which returns 0 intead of 3 and debugger indicates that self.AppleEventUpsArray pointer is 0
SLOG (@"Result Sent %@" ,theResult);
return theResult;
} |
// Question: How can I access to AppleEventUpsArray within performDefaultImplementation?
Thanks for your help
Visibilité des classes de l'application vue des procédures performDefaultImplementation d'appleScript
Bonjour
Je n'ai toujours pas réglé mon problème, et à la demande du forum, je l'écrit en français
J'ai une application mac OS X (lion) qui récupère des données sur le réseau.
J'ai rendu l'application scriptable et ai rédigé des procédures d'accès via apple script
j'ai donc une classe SolarMaxAppleEvent dont le code header SolarMaxAppleEvent.h est ci-dessous
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
@interface SolarMaxAppleEvent : NSScriptCommand {
@public NSMutableArray *AppleEventUpsArray;
@public NSMutableDictionary *appleEventUpsDict;
}
- (id)performDefaultImplementation;
@property (nonatomic, retain) NSMutableArray *AppleEventUpsArray;
@property (nonatomic, retain) NSMutableDictionary *appleEventUpsDict;
@end |
et le code d'exécution SolarMaxAppleEvent.m est ci-dessous
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
@implementation SolarMaxAppleEvent
@synthesize AppleEventUpsArray;
@synthesize appleEventUpsDict;
- (id)init {
int i;
if (self = [super init]) {
// NSLog(@"SolarMaxAppleEvent init ");
self.AppleEventUpsArray = [[NSMutableArray alloc] init];
for (i=0 ; i< 3 ; i++) {
appleEventDict = [[NSMutableDictionary alloc] init];
appleEventDict = [NSMutableDictionary dictionaryWithObjectsAndKeys:
[NSDate date], @"Date", [NSNumber numberWithInteger: 0 ], @"numPort",
[NSNumber numberWithInteger: 0 ],@"UAC" ,
[NSNumber numberWithInteger: 0 ],@"PAC" ,
[NSNumber numberWithInteger: 0 ],@"Temp",
[NSNumber numberWithInteger: 0 ],@"UDC" ,nil ];
[self.AppleEventUpsArray addObject: appleEventDict];
[appleEventDict release];
}
NSLog(@"SolarMaxAppleEvent init AppleEventUpsArray : %@ ",AppleEventUpsArray);
// at this point This AppleEventUpsArray is correctly filled with 3 objects
}
return self;
}
- (id) performDefaultImplementation {
id currentEventArray;
NSDictionary * theArguments = [self evaluatedArguments];
NSString *theResult;
SLOG(@"CommandWithArgs performDefaultImplementation");
/* report the parameters */
SLOG(@"The direct parameter is: '%@'", [self directParameter]);
SLOG(@"The other parameters are: '%@'", theArguments); // I clearly see this Log within console wiyh the rignt arguments
currentEventArray = self.AppleEventUpsArray;
theResult = [NSString stringWithFormat:@"'%@'", [self.currentEventArray count]];
// which returns 0 intead of 3 and debugger indicates that self.AppleEventUpsArray pointer is 0
SLOG (@"Result Sent %@" ,theResult);
return theResult;
} |
Cette classe est en principe initialisée au démarrage de l'application.
En revanche, lorsque j'appelle la procédure applescript le script entre bien dans la fonction performDefaultImplementation, mais les attributs et instances (AppleEventUpsArray, et appleEventUpsDict) de la classe sont des pointeurs nuls.
Le script ne voit pas le pointeur d'instance initialisé par le logiciel.
Que faut-il faire pour déclarer dans l'interface (*.sdef ou autre) de partager les données de l'application avec l'espace vu par applescript?
Merci de votre aide
guydelaciste