Цель C - экземпляр класса Singleton не инициализируется - PullRequest
2 голосов
/ 15 августа 2011

Я объявил класс SharedTranslationsArray, который хочу использовать в нескольких контроллерах представления.

Затем я в контроллере представления MainViewController.m объявляю экземпляр переменной в «ViewDidLoadMethod» и пытаюсь добавить объект в массив в экземпляре singleton. Нет ошибок / предупреждений компиляции, но элементы не добавляются в массив.

Любой совет будет оценен. Соответствующие примеры кода ниже Спасибо

**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

1 Ответ

2 голосов
/ 16 августа 2011

Убедитесь, что вы на самом деле инициализируете translation_set!

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

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

Кроме того, почему вы называете это множеством, но объявляете его как массив?Если порядок объектов не важен, вы можете сделать это NSMutableSet

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...