NSMutableDictionary "нераспознанный селектор отправлен в экземпляр" - PullRequest
3 голосов
/ 09 декабря 2011
    -(void)saveDictionary:(int)counter
    {
        NSString *path=[[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"];
        NSString *test = [NSString stringWithFormat:@"%d", counter];
        [theDictionary setObject:test forKey:@"Counter"]; <---- Error
        [theDictionary writeToFile:path atomically:YES];
    }

    - (void)applicationDidEnterBackground:(UIApplication *)application
    {
        [self saveDictionary:[_viewController counter]];
    }

Ошибка:

-[NSCFString setObject:forKey:]: unrecognized selector sent to instance
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString setObject:forKey:]: unrecognized selector sent to instance

Я могу загрузить значение для ключа "Счетчик" из plist.Если я хочу сохранить новое значение для того же ключа "Счетчик" ... Ошибка.Нужна помощь, потратил часы.

пока

Вот код для инициализации theDictionary:

-(void)initDictionary {
    if (theDictionary == nil) {
        NSString *path=[[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"];
        theDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
        theString = [theDictionary objectForKey:@"Counter"];
    }
}

Найден!

theString = [[NSString alloc] initWithFormat:[theDictionary objectForKey:@"Counter"]];

Спасибо всем!

Ответы [ 6 ]

4 голосов
/ 09 декабря 2011

Это потому, что объект, хранящийся в theDictionary, на самом деле является NSString, а NSString не содержит метод с именем -setObject:forKey. Проверьте свой код на наличие мест, которым присваивается theDictionary, и убедитесь, что это действительно NSMutableDictionary.

3 голосов
/ 27 декабря 2013

проверьте инициализацию .. вы могли бы сделать это так.

NSMutableDictionary * dictoForSyncing = [[* NSMutableArray alloc] init];

1 голос
/ 09 декабря 2011

Похоже, theDictionary - это строка вместо NSMutableDictionary. Где он создан и что с ним случилось за это время?

0 голосов
/ 27 июня 2014
NSMutableArray *myObjFromFile = ....;
NSMutableDictionary *tmpDictFromFile = 
  [[[myObjFromFile objectAtIndex:xx] mutableCopy]; mutableCopy];

[tmpDictFromFile setObject:"YOUR OBJECT"
                    forKey:"YOUR KEY"];
0 голосов
/ 09 декабря 2011

Кажется, что ваше свойство theDictionary на самом деле не словарь, а строка (NSString). Где определено theDictionary?

0 голосов
/ 09 декабря 2011

Это говорит о том, что theDictionary вообще не является словарем.Скорее всего, он был выпущен ранее, и некоторые NSString заняли его место.

Вы используете ARC?Где был определен «theDictionary».

И пробовали ли вы инструмент зомби, чтобы отследить это?Это должно помочь.

...