0

我一直在尝试使用我的手首次构建一个本机iOS模块,以便从官方Appcelerator文档中使用Titanium应用程序:iOS Module Quick Start。不知道为什么作为使用未声明的已识别变量

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

我在那里我在ComExampleTestModule.m文件中使用可变注意到这个错误的的deallocsetExampleProp构建失败。

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

你有没有在.m文件上试过@synthesize foo? –

+0

没有@RicardoAlves只是试了一下,因为它在文档中说。并做了一个小改动,将显式传递给setExampleProp的foo不起作用。 –

+2

'foo'是'ComAppcNewmoduleModule'的成员,而不是'ComExampleTestModule'。但是你试图在'ComExampleTestModule'('@implementation ComExampleTestModule')中访问它。这就是你出错的原因。 – Larme

回答

2

fooComAppcNewmoduleModule成员,而不是ComExampleTestModule。但您尝试在ComExampleTestModule@implementation ComExampleTestModule)中访问它。
这就是为什么你会收到错误,因为ComExampleTestModule不知道foo