2009-12-31 42 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