2013-09-11 2 views
1

В основном я получаю эту ошибку__NSCFConstantString objectForKey непризнанный селектор отправляется ошибка экземпляра

'NSInvalidArgumentException', reason: '-[__NSCFConstantString objectForKey:]: unrecognized selector sent to instance 0x581f0' 

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

if (data != nil) { 
    if([data objectForKey:@"username"]){ 
     // NSArray *check= [[NSArray alloc]init]; 
     //check=[data allValues]; 
     [dict setObject:[data allValues] forKey:@"args"]; 

    }else{ 
    [dict setObject:[NSArray arrayWithObject:data] forKey:@"args"]; 
} 

на setObject: [данные всеValues]. Я не знаю, почему он дает эту ошибку, но данные являются NSDictionary, и я получаю все значения и помещаю их в массив.

+1

Сразу после «if (data! = Nil)», log [data class] и посмотреть, что он дает. – rdelmar

+0

@rdelmar Спасибо за подсказку. Это показало проблему. Сначала он возвращает NSMutableDictionary, затем строку. Итак, теперь мой вопрос: есть ли способ проверить, является ли что-то aSDictionary или нет? –

+1

Как насчет if ([data isKindOfClass: [класс NSDictionary]]) – rdelmar

ответ

3

ли ошибка происходит здесь:

if([data objectForKey:@"username"]){ 

Я предполагаю, что это так, так как это единственное место, где objectForKey, кажется, называется. Вы называете его переменной, называемой «данные», которую я предполагаю просто не словарь. Вы должны просмотреть его тип NSLog.

+0

Подсказка: это строка. – Chuck

+0

@darren Да, сначала он возвратил _NSDictionaryM, а затем после строки. Это действительно относится к тому, что я изначально хотел. Есть ли способ проверить, что значение, которое вы используете, является NSDictionary? –

+0

Есть способы проверить, конечно. Но ваша ситуация звучит как неприятная проблема с памятью (если я понимаю это право). Вы иногда говорите, когда вы регистрируетесь, вы получаете словарь, а иногда получаете строку? Такая ошибка иногда подразумевает перевыпуск объекта aj (вы используете дугу?). Время выполнения освобождает исходный словарь и использует это старое пространство для размещения нового строкового объекта. –

Смежные вопросы