2011-08-15 110 views
2

我已經聲明瞭一個名爲'SharedTranslationsArray'的類,我想在多個視圖控制器中使用它。Objective C - 單例類instan未初始化

然後我在視圖控制器MainViewController.m我聲明「ViewDidLoadMethod」中的變量的一個實例,並嘗試將對象添加到單例實例中的數組。沒有編譯錯誤/警告,但項目未添加到陣列。

任何意見,將不勝感激。相關代碼示例如下 謝謝

**SharedTranslations.h** 
#import "Foundation/Foundation.h" 

@interface SharedTranslationsArray : NSObject { 
NSMutableArray *translation_set; 
} 

static SharedTranslationsArray *sharedInstance; 
@property (nonatomic, retain) NSMutableArray *translation_set; 
+ (SharedTranslationsArray*) sharedInstance; 

@end 

**SharedTranslations.m** 

#import "SharedTranslationsArray.h" 

static SharedTranslationsArray *sharedInstance; 
@implementation SharedTranslationsArray 
@synthesize translation_set; 

\+ (SharedTranslationsArray*)sharedInstance 
{ 
     if (sharedInstance == nil) {    
      sharedInstance = [[super allocWithZone:NULL] init]; 


     } 
    return sharedInstance; 
} 

\ + (id)allocWithZone:(NSZone *)zone 
{ 
    return [[self sharedInstance]retain]; 
} 

\ - (id)copyWithZone:(NSZone *)zone 
{ 
    return self;  
} 

\ - (id)retain 
{ 
    return self;  
} 

\ - (unsigned)retainCount 
{ 
    return NSUIntegerMax; //denotes an object that cannot be released 
} 

\ - (void)release 
{ 
    //do nothing 
} 

\ - (id)autorelease 
{ 
    return self;  
} 

@end 

**MainViewController.m** 
#import "MainViewController.h" 
#import "Translations.h" 
#import "SharedTranslationsArray.h" 

@implementation MainViewController 
\- (void)viewDidLoad { 
    NSMutableString *temp = [[NSMutableString alloc] init]; 

    SharedTranslationsArray *ts = [SharedTranslationsArray sharedInstance]; 

    Translations *translation = [Translations new]; 
    translation.shortText = @"short"; 
    translation.fullText = @"long"; 
    translation.canDeleted = FALSE; 
    translation.active = TRUE; 
    [ts.translation_set addObject:translation]; 
} 
@end 

回答

2

確保您實際初始化translation_set!

+ (SharedTranslationsArray*)sharedInstance 
{ 
     if (sharedInstance == nil) {    
      sharedInstance = [[super allocWithZone:NULL] init]; 

      sharedInstance.translation_set = [NSMutableArray array]; 
     } 
    return sharedInstance; 
} 

另外,你爲什麼要調用它,但將其聲明爲數組?如果對象的順序不重要,你可以使它成爲一個NSMutableSet