使用未声明的标识变量

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'? 

我注意到 deallocsetExampleProp 的错误,其中我使用 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

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