iphone NSNumberFormatter работает на симуляторе, а не на устройстве OS 4.2 при разборе - PullRequest
3 голосов
/ 05 декабря 2010

Это кусок кода Terremoto от Крейга Шампа .. отлично работает на симуляторе (OS 4.2), но не на устройстве.

self.currentEarthquake.magnitude = [formatter numberFromString:magString]; and

NSNumber *latituide = [formatter numberFromString:[comp objectAtIndex:0]];

NSNumber *longitude = [formatter numberFromString:[comp objectAtIndex:1]] 

на устройстве равно нулю, а на симуляторе есть все данные .... здесь весь код .... мое устройство 3g с 4.2 NSNumberFormatter это проблема ???

if ([elementName isEqualToString:@"title"]) {
  //<title>M 5.8, Banda Sea</title>
  NSArray *components = [self.propertyValue componentsSeparatedByString:@","];
  if (components.count > 1) {
   // strip the M
   NSString *magString = [[[components objectAtIndex:0] componentsSeparatedByString:@" "] objectAtIndex:1];

   NSLog(@"String %@",magString);

   NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
   self.currentEarthquake.magnitude = [formatter numberFromString:magString];
   self.currentEarthquake.place = [components objectAtIndex:1];
   [formatter release];

   NSLog(@"Magnetudine %@",self.currentEarthquake.magnitude);
   NSLog(@"Place %@",self.currentEarthquake.place);

   NSLocale *currentUsersLocale = [NSLocale currentLocale];
   NSLog(@"Current Locale: %@", [currentUsersLocale localeIdentifier]);

  }
 } else if ([elementName isEqualToString:@"updated"]) {
  //<updated>2008-04-29T19:10:01Z</updated>
  NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"];
  self.currentEarthquake.lastUpdate = [formatter dateFromString:self.propertyValue];
  [formatter release];

  NSLog(@"Date %@",self.currentEarthquake.lastUpdate);

 } else if ([elementName isEqualToString:@"georss:point"]) {
  NSArray *comp = [self.propertyValue componentsSeparatedByString:@" "];
  NSLog(@"Comp %@",comp);

  NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];


  NSNumber *latituide = [formatter numberFromString:[comp objectAtIndex:0]];
  NSLog(@"Latitude %@",latituide);
  NSNumber *longitude = [formatter numberFromString:[comp objectAtIndex:1]];
  [formatter release];
  CLLocation *location = [[CLLocation alloc] initWithLatitude:latituide.floatValue
                longitude:longitude.floatValue];
  self.currentEarthquake.location = location;
  [location release];

  NSLog(@"Location %@",location);
 } else if([elementName isEqualToString:@"entry"]) {
  [(id)[self delegate] performSelectorOnMainThread:@selector(addEarthquake:)
             withObject:self.currentEarthquake
             waitUntilDone:NO];
 }

2010-12-05 03: 46: 45.738 Terremoto [251: 307] Comp ( «41,9022», «12,4579» ) 2010-12-05 03: 46: 45.745 Terremoto [251: 307] Широта (ноль)

2010-12-05 03: 46: 45.847 Terremoto [251: 307] Местоположение <+0,00000000, +0,00000000> +/- 0,00 м (скорость -1,00 м / с / курс -1,00) @ 05.12.10 03: 46:45 GMT-03: 00

2010-12-05 03: 46: 45.854 Terremoto [251: 307] Строка 5.0

2010-12-05 03: 46: 45.864 Terremoto [251: 307] Магнетудин (ноль)

2010-12-05 03: 46: 45.868 Terremoto [251: 307] Place Hotel Ergife

2010-12-05 03: 46: 45.871 Terremoto [251: 307] Текущий язык: it_IT

2010-12-05 03: 46: 45.892 Terremoto [251: 307] Дата 2010-10-14 14:35:18 + 0000

2010-12-05 03: 46: 45.898 Terremoto [251: 307] Comp ( «-6,1020», "127.5017" ) * * Тысяча двадцать-один

журнал устройства

Ответы [ 2 ]

6 голосов
/ 05 декабря 2010

Причина, по которой это не работает, скорее всего в том, что в вашей локали (итальянской) точка "." не является допустимым десятичным разделителем.

Позвоните -[NSNumberFormatter setDecimalSeparator:], чтобы установить правильное значение.

1 голос
/ 19 апреля 2011

У меня была та же проблема в том же контексте (разбор координат).Я на iOS 4.3.Мой Mac и iPad, которые я использовал, оба настроены на немецкий язык, поэтому IMO форматер должен вести себя одинаково, но это не так.* Это работает на симуляторе и на устройстве.

...