У меня есть код, который я портирую с iOS 4 на iOS 3.2 для демонстрационного проекта на iPad.У меня есть этот код:
+(int) parseInt:(NSString *)str
{
NSNumberFormatter *nf = [[NSNumberFormatter alloc] init];
[nf setAllowsFloats:NO];
[nf setMaximum:[NSNumber numberWithInt:INT_MAX]];
[nf setMinimum:[NSNumber numberWithInt:INT_MIN]];
@try {
NSNumber *num = [nf numberFromString:str];
if (!num)
@throw [DataParseException exceptionWithDescription:@"the data is not in the correct format."];
return [num intValue];
}
@finally {
[nf release];
}
}
Это работает затрат на iOS 4, выбрасывая исключения, когда строка (например, дата, с которой у меня проблемы): 1/1/2010
Дляпо какой-то причине, num не равно nil, оно имеет значение 1
, в то время как на iOS 4 оно равно nil, как и ожидалось.Первоначально я использовал NSScanner
, потому что это было проще, чем NSNumberFormatter
, но я столкнулся с той же проблемой, он не анализирует всю строку, только первое число в строке.
IsЕсть что-то, что я могу сделать, чтобы это исправить, или я должен вручную создать анализатор int.Я бы предпочел не использовать подход, основанный на C, но, если понадобится, я это сделаю.
РЕДАКТИРОВАТЬ: я обновил свой код до этого:получить сигнал EXC_BAD_ACCESS, когда я пытаюсь разобрать строку 1/1/2001
.Есть идеи?(iOS 4 или выше определена здесь: http://cocoawithlove.com/2010/07/tips-tricks-for-conditional-ios3-ios32.html)
У меня новая ошибка: когда я анализирую число, оно не точное (точное, поскольку в нем есть несколько десятичных знаковпри использовании того же кода для чисел с плавающей запятой) больше .... как я могу это исправить ?? (я мог бы просто использовать ответ @ joshpaul ...)