2009-12-31 26 views
0

在我创建的类中没有执行代码时遇到了一些问题,并认为我在这里正确初始化和实现了所有文件。有一个类与另一个类的数组。然后在代码中最终实现,但由于某种原因,除了紧接在主代码中的[mobdefs createTable]之前,没有任何NSLog调用似乎执行。感谢所有帮助...objective c类代码不执行?我的问题是什么?

// Mobdefs.h 
@interface Mobdefs : NSObject { 

    @public NSMutableArray *mobInfo; 
} 

@property(retain) NSMutableArray *mobInfo; 

-(void) createTable; 

@end 

// Mobdefs.m 
#import "Mobdefs.h" 
#import "Mobrec.h" 

@implementation Mobdefs 

@synthesize mobInfo; 

- (id) init 
{ 
mobInfo = [[NSMutableArray alloc] init]; 
return self; 
} 

-(void) addmobrec 
{ 
MobRec *aNewMobRec = [[MobRec alloc] init]; 
[email protected]"newbie"; 
[mobInfo addObject:aNewMobRec]; 
[aNewMobRec release]; 
NSLog(@"MobRec Added\n"); 
} 

-(void) createTable 
{ 
NSLog(@"Populating mob table.\n"); // *** THIS CODE NEVER SEEMS TO GET EXECUTED 
} 

@end 


//main.h 
Mobdefs *mobdef; 


//main.m 
NSLog(@"just before createTable call\n"); 
[mobdef createTable]; 

虽然CREATETABLE代码被称为主唯一的NSLog输出我得到的是“之前CREATETABLE ......”

回答

1

您似乎没有初始化mobdef。添加以下内容:

mobdef = [[Mobdefs alloc] init]; 

到您的main.m然后调用其上的方法。

Objective-C默默地忽略nil上的调用,因为mobdef将初始化为初始值。

+0

嗯我这样做主要是: Mobdefs * mobdef; 我认为,当一个指针被创建时,它的init被固有地调用。这不是这种情况吗? – user240272 2009-12-31 13:40:34

+0

嗯我主要做到这一点: Mobdefs * mobdef; 我认为,当一个指针被创建时,它的init被固有地调用。这不是这种情况吗?我做到了这一点,现在它正在工作,我想我错了,需要启动一个明确的init调用。我真的认为init是被赋值自动调用的 - 有趣的是,如何获得未使用int的警告,但忽略了未分配的类。 – user240272 2009-12-31 13:46:05

+0

外部方法(字段,静态变量等)的引用声明总是初始化为'nil'。你明确地需要正确地初始化它们。在没有初始化的方法中声明的引用可能被分配垃圾并且编译器会对此提出警告。 – notnoop 2009-12-31 14:15:22