0

J'ai essayé pour la première fois de construire un module iOS natif à utiliser pour une application Titanium à partir des documents officiels appcelerator: iOS Module Quick Start. Je ne sais pas pourquoi la construction échoueUtilisation de la variable identifiée non déclarée

'/iphone/Classes/ComExampleTestModule.m:55:20: Use of undeclared identifier 'foo'; did you mean 'for'? 

Je remarque cette erreur pour le dealloc et setExampleProp où j'utilise la variable foo dans le fichier ComExampleTestModule.m.

ComExampleTestModule.h

#import "TiModule.h" 

@interface ComExampleTestModule : TiModule 
{ 
} 

@end 

@interface ComAppcNewmoduleModule : TiModule 
{ 
    NSString *foo; 
} 
@end 

ComExampleTestModule.m

/** 


* test 
* 
* Created by Your Name 
* Copyright (c) 2017 Your Company. All rights reserved. 
*/ 

#import "ComExampleTestModule.h" 
#import "TiBase.h" 
#import "TiHost.h" 
#import "TiUtils.h" 

@implementation ComExampleTestModule 

#pragma mark Internal 

// this is generated for your module, please do not change it 
-(id)moduleGUID 
{ 
    return @"e5d1b415-6588-4911-9825-3a210032b430"; 
} 

// this is generated for your module, please do not change it 
-(NSString*)moduleId 
{ 
    return @"com.example.test"; 
} 

#pragma mark Lifecycle 

-(void)startup 
{ 
    // this method is called when the module is first loaded 
    // you *must* call the superclass 
    [super startup]; 

    NSLog(@"[INFO] %@ loaded",self); 
} 

-(void)shutdown:(id)sender 
{ 
    // this method is called when the module is being unloaded 
    // typically this is during shutdown. make sure you don't do too 
    // much processing here or the app will be quit forceably 

    // you *must* call the superclass 
    [super shutdown:sender]; 
} 

#pragma mark Cleanup 

-(void)dealloc 
{ 
    // release any resources that have been retained by the module 
    RELEASE_TO_NIL(foo); // Errors out on this line 
    [super dealloc]; 
} 

#pragma mark Internal Memory Management 

-(void)didReceiveMemoryWarning:(NSNotification*)notification 
{ 
    // optionally release any resources that can be dynamically 
    // reloaded once memory is available - such as caches 
    [super didReceiveMemoryWarning:notification]; 
} 

#pragma mark Listener Notifications 

-(void)_listenerAdded:(NSString *)type count:(int)count 
{ 
    if (count == 1 && [type isEqualToString:@"my_event"]) 
    { 
     // the first (of potentially many) listener is being added 
     // for event named 'my_event' 
    } 
} 

-(void)_listenerRemoved:(NSString *)type count:(int)count 
{ 
    if (count == 0 && [type isEqualToString:@"my_event"]) 
    { 
     // the last listener called for event named 'my_event' has 
     // been removed, we can optionally clean up any resources 
     // since no body is listening at this point for that event 
    } 
} 

#pragma Public APIs 

-(id)example:(id)args 
{ 

    return @"hello world"; 
} 

-(id)exampleProp:(id)foo 
{ 
    NSLog(@"[INFO] In Module - the stored value for exampleProp: %@", foo); 
    return foo; 
} 

-(void)setExampleProp:(id)value 
{ 
    // Macro from TiBase.h to type check the data 
    ENSURE_STRING(value); 
    // Call the retain method to keep a reference to the passed value 
    foo = [value retain]; // Errors out on this line 
    NSLog(@"[INFO] In Module - the new value for exampleProp: %@", value); 
} 

@end 
+0

Avez-vous essayé @synthesize foo sur le fichier .m? –

+0

Nope @RicardoAlves juste essayé comme il est dit dans les docs. et fait une modification mineure pour passer explicitement foo pour setExampleProp qui ne fonctionne pas. –

+2

'foo' est un membre de' ComAppcNewmoduleModule', pas 'ComExampleTestModule'. Mais vous essayez d'y accéder dans 'ComExampleTestModule' (' @implementation ComExampleTestModule'). C'est pourquoi vous obtenez l'erreur. – Larme

Répondre

2

foo est membre de ComAppcNewmoduleModule, non ComExampleTestModule. Mais vous essayez d'y accéder dans ComExampleTestModule (@implementation ComExampleTestModule).
C'est pourquoi vous obtenez l'erreur., Car ComExampleTestModule ne connaît pas foo.