Как да разрешите проблем с типа данни в 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]; [f освобождаване];   -  person user2071152    schedule 11.06.2014


Отговори (1)


Можеш да използваш

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

Надявам се това да помогне.

person user2071152    schedule 11.06.2014