2011-10-08 56 views
0

我正在尝试为我的程序制作自定义HashTable。是的,我知道Xcode中已经有了一个HashTable类,但是对于这种情况我有一个自定义类。它应该很简单,但是当我试图在我的视图控制器中使用它时,即使在调用初始化方法之后,调试器仍显示其值为“0x0”。下面的代码:初始化自定义类的对象的问题

//header file HashTable.h 

#import <Foundation/Foundation.h> 


@interface HashTable : NSObject 
{ 
} 

-(void)initWithLength:(int)capacity; 
-(void)add:(NSObject*)object withName:(NSString*)name; 
-(id)getObjectFromIndex:(int)index; 
-(id)getObjectWithName:(NSString*)name; 

@end 


//main file HashTable.m 

#import "HashTable.h" 

@implementation HashTable 

NSMutableArray* values; 
NSMutableArray* markers; 

-(id)initWithLength:(int)capacity //Apparently, this never gets called 
{ 
    self = [super init]; 
    if (self) 
    { 
     values = [[NSMutableArray alloc] initWithCapacity:capacity]; 
     markers = [[NSMutableArray alloc] initWithCapacity:capacity]; 
    } 
    return self; 
} 

-(void)add:(NSObject*)object withName:(NSString*)name 
{ 
    [values addObject:object]; 
    [markers addObject:name]; 
} 

-(id)getObjectFromIndex:(int)index 
{ 
    return [values objectAtIndex:index]; 
} 

-(id)getObjectWithName:(NSString*)name 
{ 
    for (int i = 0; i < [markers count]; i++) 
    { 
     if ([[markers objectAtIndex:i] isEqualToString:name]) {return [values objectAtIndex:i];} 
    } 
    return [NSObject new]; 
} 

-(void)removeObjectFromIndex:(int)index 
{ 
    [values removeObjectAtIndex:index]; 
    [markers removeObjectAtIndex:index]; 
} 

-(void)removeObjectWithName:(NSString*)name 
{ 
    for (int i = 0; i < [markers count]; i++) 
    { 
     if ([[markers objectAtIndex:i] isEqualToString:name]) 
     { 
      [values removeObjectAtIndex:i]; 
      [markers removeObjectAtIndex:i]; 
      return; 
     } 
    } 
} 

-(BOOL)isEmpty 
{ 
    return [values count] == 0; 
} 

-(void)dealloc 
{ 
    [values release]; 
    [markers release]; 
    [super dealloc]; 
} 

@end 

然后我有一个使用哈希表视图控制器的部分:

//header file 

#import <UIKit/UIKit.h> 

#import "HashTable.h" 

@interface Circuitry_LabViewController : UIViewController 
{ 
    HashTable* table; 
} 

@property(nonatomic, retain) HashTable* table; 

@end 

//main file 

#import "Circuitry_LabViewController.h" 

@implementation Circuitry_LabViewController 

@synthesize table; 

- (void)viewDidLoad 
{ 
    [table initWithLength:10]; 
    [super viewDidLoad]; 
} 

我看不到什么,我在这里失踪。谁能帮忙?

回答

1

你的意思做这-viewDidLoad:

table = [[HashTable alloc] initWithLength:10]; 

有什么地方告诉我,你这样做是错误的。

+0

所以即使我在头文件中声明它,我仍然需要这样做吗? – RaysonK

+0

@RaysonK是的,你这样做。 –

+0

好的,做到了,但它仍然是“0x0”。我也收到一个警告,说'表格可能无法识别'alloc''。我需要在HashTable中创建一个alloc方法吗? – RaysonK