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