3

这是 Craig Schamp 的一段 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.00m(速度 -1.00 mps / 路线 -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] Magnetudine(空)

2010-12-05 03:46:45.868 Terremoto[251:307] 埃尔吉夫广场酒店

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] 比较(“-6.1020”,“127.5017”)

设备日志

4

2 回答 2

6

它不起作用的原因很可能是在您的语言环境(意大利语)中,句点“。” 不是有效的小数分隔符。

调用-[NSNumberFormatter setDecimalSeparator:]将其设置为正确的值。

于 2010-12-05T09:14:38.887 回答
1

我在相同的上下文中遇到了同样的问题(解析坐标)。我在 iOS 4.3 上。我的 Mac 和我使用的 iPad 都设置为德语,因此 IMO 格式化程序的行为方式应该相同,但事实并非如此。

我最终使用了这个:

 pi.latitude = [NSNumber numberWithDouble:[(NSString *)[coords objectAtIndex:0] doubleValue]];

这适用于模拟器和设备。

于 2011-04-18T21:04:40.327 回答