Как решить проблему с типом данных в iOS

У меня есть одно представление коллекции с текстовым полем в каждой ячейке. Я извлекаю значения из словаря nsmutable и устанавливаю текст текстового поля в ячейке, используя следующие коды.

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CollectionviewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
    NSDictionary *datadictionary = [_currencyDictionary objectForKey:_currencyNameDetails[_flag]];
    cell.currenyRate.text = [datadictionary objectForKey:_currencyRateValueDetails[row]];
    return cell;

}

В этой ситуации мое приложение разбилось, показать ошибку ....

Завершение работы приложения из-за неперехваченного исключения '

NSInvalidArgumentException», причина: «-[__NSCFNumber length]: в экземпляр отправлен нераспознанный селектор.

Я нахожу причину этого, используя указанный ниже метод. Объект [datadictionary objectForKey:_currencyRateValueDetails[row]] имеет формат nsnumber.

if([[datadictionary objectForKey:_currencyRateValueDetails[row]] isKindOfClass:[NSNumber class]])
    {
        NSLog(@"nsnumber......");
    }
    else{NSLog(@"nsstring......");
}

поэтому перепишите мой код на

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView   cellForItemAtIndexPath:(NSIndexPath *)indexPath
{

     CollectionviewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
    NSDictionary *datadictionary = [_currencyDictionary objectForKey:_currencyNameDetails[_flag]];
    NSNumber *Value =[[NSNumber alloc]init];
    Value = [currenymap objectForKey:_currencyRateValueDetails[row]];
    NSString *myString = [Value stringValue];
    cell.currenyRate.text = myString;
    return cell;


}

На этот раз сбой приложения снова показывает ошибку

Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «-[__NSCFConstantString stringValue]: экземпляру отправлен нераспознанный селектор.

Как я могу решить эту проблему?


person user3698427    schedule 11.06.2014    source источник
comment
Вы можете попробовать использовать NSString *myStringWithNumbers = [NSString stringWithFormat:@%d,[currenymap objectForKey:_currencyRateValueDetails[row]]];   -  person user2071152    schedule 11.06.2014
comment
@ user2071152, спасибо, все работает. Если вы поместите свой комментарий в качестве ответа, я поставлю его как правильный ответ.   -  person user3698427    schedule 11.06.2014
comment
@ user2071152 мне нужна еще одна помощь, чтобы преобразовать NSString в NSNumber, как этот метод   -  person user3698427    schedule 11.06.2014
comment
Для строк, начинающихся с целых чисел, например, @123 и т. д., используйте -[NSString integerValue]. (NSInteger number=[string integerValue];). Вы также можете использовать NSNumberFormatter как NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; [f setNumberStyle:NSNumberFormatterDecimalStyle]; NSNumber *myNumber = [f numberFromString:stringNum]; [ф релиз];   -  person user2071152    schedule 11.06.2014


Ответы (1)


Ты можешь использовать

NSString *myStringWithNumbers = [NSString stringWithFormat:@"%d",[currenymap objectForKey:_currencyRateValueDetails[row]]];

Надеюсь это поможет.

person user2071152    schedule 11.06.2014