使用未声明的标识变量
Use of undeclared identified variable
我一直在尝试构建一个本机 iOS 模块,供来自官方 appcelerator 文档的 Titanium 应用程序使用:iOS Module Quick Start。不确定为什么构建失败
'/iphone/Classes/ComExampleTestModule.m:55:20: Use of undeclared identifier 'foo'; did you mean 'for'?
我注意到 dealloc 和 setExampleProp 的错误,其中我使用 foo 变量在 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
foo
是 ComAppcNewmoduleModule
的成员,而不是 ComExampleTestModule
的成员。但是您尝试在 ComExampleTestModule
(@implementation ComExampleTestModule
).
中访问它
这就是您收到错误的原因。因为 ComExampleTestModule
不知道 foo
.
我一直在尝试构建一个本机 iOS 模块,供来自官方 appcelerator 文档的 Titanium 应用程序使用:iOS Module Quick Start。不确定为什么构建失败
'/iphone/Classes/ComExampleTestModule.m:55:20: Use of undeclared identifier 'foo'; did you mean 'for'?
我注意到 dealloc 和 setExampleProp 的错误,其中我使用 foo 变量在 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
foo
是 ComAppcNewmoduleModule
的成员,而不是 ComExampleTestModule
的成员。但是您尝试在 ComExampleTestModule
(@implementation ComExampleTestModule
).
中访问它
这就是您收到错误的原因。因为 ComExampleTestModule
不知道 foo
.