NSMutableDictionary EXC_BAD_ACCESS - PullRequest
       8

NSMutableDictionary EXC_BAD_ACCESS

0 голосов
/ 15 сентября 2011

Я знаю, что есть много вопросов по этой теме, но ни один из них не работает для меня, потому что мой немного странный.

Прежде всего я создаю статический синглтон-класс. и объявить переменную NSMutableDictionary

static NSMutableDictionary* mydic
@implementation mySingleton

-(mySingleton*)getInstance
{
    static mySingleton *sharedInstance;
    @synchronized(self)
    {
       if(!sharedInstance)
       {
          sharedInstance = [[mySingleton alloc] init];
          mydic = [[NSMutableDictionary alloc] initWithCapacity:1];
       }
       return sharedInstance;
    }
}

-(NSMutableDictionary*)getDictionary
{
   return myDic;
}

затем я вызываю этот NSMutableDictionary из другого класса, как показано ниже.

NSMutableDictionary* singletonDictionary = [[mySingleton getInstance] getDictionary];

MyOtherClass* myclass = [singletonDictionary objectForKey:key];// Key is NSString
// Here I can see whole the values I added to myClass for that key
NSArray *checkKey = [singletonDictionary allKeys];
for(int i = 0; i < [singletonDictionary count]; i++)
{
    NSLog(@"%@",[checkKey objectAtIndex:i]);// here I can see my key is there
}

[singletonDictionary removeObjectForKey:key];// here it crashes EXC_BAD_ACCESS

Я сойду с ума от этой проблемы. Если у кого-то есть идея, пожалуйста, поделитесь ею со мной.

РЕДАКТИРОВАТЬ:

MyOtherClass * myinstance = [[MyOtherClass alloc] init];
// Fill up the instance with the desired variable here
// Forexample
// myinstance.name = [NSString stringWithFormat:@"myInstanceName"];
.
.
.

[[[mySingleton getInstance] getDictionary] setObject:myinstance forKey:key]// key is an NSString*
[myinstance release];

Спасибо за помощь.

Омер Фарук КУРТ

Ответы [ 2 ]

3 голосов
/ 15 сентября 2011

Так много проблем, с чего начать ...?

По крайней мере, кажется, ваш getInstance метод ничего не возвращает;вероятно, он должен вернуть mySingleton.Это может объяснить ваш EXEC_BAD_ACCESS, так как singletonDictionary, вероятно, nil при существующем положении вещей.

Ваш экземпляр синглтона также неверен - вам нужно проверить, был ли синглтон уже создан, и вернуть его, еслиона имеет.В противном случае вы можете перераспределить синглтоны, что абсурдно.

Статические ссылки здесь плохого дизайна, их лучше разбивать на подклассы и объявлять члены в заголовочном файле.

Это может решить ваши проблемы, но выявно запрыгивая в глубокий конец, и вы столкнетесь с большим количеством неприятностей.Я думаю, вам нужно найти хорошие примеры кода в текстах или в Интернете и изучить их.Если вы сделаете это довольно скоро, то выучите веревки.

0 голосов
/ 15 сентября 2011

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

...