2016-05-10 4 views
-1

Так что я некоторое время застрял в этом, и я просмотрел много сообщений в Stackoverflow, но я все еще не могу понять, как решить проблему проблема. Мне кажется, что «dict» предполагается преобразовать в строку, поэтому я попытался это разными способами, например, используя NSString *myString = [NSNumber stringValue];, [NSString stringWithFormat:@"%d", dict[@"id"]]; и некоторые другие. Вот код:- [__ NSCFNumber objectForKeyedSubscript:]: непризнанный селектор, отправленный в экземпляр

for (NSDictionary *dict in self.params) { 
    NSString *value = dict[@"id"]; 

    if (value) { 
     [parameters appendFormat:@"&ids[]=%@", value]; 
    } 
} 

Я получаю ошибку на этой линии: NSString *value = dict[@"id"];

Выход на консоль показывает:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber objectForKeyedSubscript:]: unrecognized selector sent to instance 0xb00000000000a313' 

Я думаю, что проблема в том, что она не кажется для правильного преобразования в строку. Строка показывает dict как NSCFNumber (long) 2609. Как я могу преобразовать его в строку?

+0

Вы уверены, что 'self.params' содержит только' объекты NSDictionary' ? Кажется, что в нем есть объект NSNumber, а не объект NSDictionary. – Larme

+0

@ Larme ohh, self.params содержит один объект NSDictionary и один объект NSNumber – coderdojo

+0

@ Larme, как его можно преобразовать? – coderdojo

ответ

1

// попробовать, как это будет работать

for (NSDictionary *dict in self.params) { 
if([dict isKindOfClass:[NSDictionary class]]) { 
    NSString *value = [NSString stringWithFormat:@"%@",dict[@"id"]]; 

    if (value) { 
     [parameters appendFormat:@"&ids[]=%@", value]; 
    } 
} 
} 
2

Данные вашего self.params должны содержать номер NSNumber. Как только вы доберетесь до номера и попытаетесь извлечь ключ, вы потерпите крах.

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

Вы можете изменить свой цикл, как это:

for (NSDictionary *dict in self.params) 
{ 
    if (![dict isKindOfClass: [NSDictionary class]) 
    { 
     NSLog("Non-Dictionary object %@ found. Skipping.", dict) 
     continue; 
    } 
    NSString *value = dict[@"id"]; 

    if (value) { 
     [parameters appendFormat:@"&ids[]=%@", value]; 
    } 
} 
0
[self.params enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 
    if ([obj isKindOfClass:[NSDictionary class]]) { 

    // Do whatever you want 
    } 
}]; 
Смежные вопросы