2010-12-04 5 views
3

これはCraig Schampのterremotoのコードです。シミュレータ(os 4.2)ではうまく動作しますが、デバイスではうまく動作しません。デバイス上のiphone NSNumberFormatterは、デバイスos 4.2では解析中ではない

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

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

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

シミュレータ上のすべてのデータを持っている間、私のデバイスは4.2 と3gはされて....ここに....すべてのコードはnullです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テレモト[251:307] COMP( "41.9022"、 "12.4579" ) 2010-12-05 03:46:45.745テレモト[251 :307]緯度(null)

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] String 5.0

2010-12-05 03:46:45.864テレモト[251:307] Magnetudine(ヌル)

2010-12-05 03:46:45.868テレモト[251:307]プレイスホテルエルジフェ

2010-12-05 03:46:45.871 Terremoto [251:307]現在のロケール:it_IT

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

2010-12-05 03:46:45.898テレモト[251:307] COMP( "-6.1020"、 "127.5017" )

デバイスログ

+0

あなたはNSLog 'components'を使用できますか? –

答えて

6

それが動作しない理由は、最も可能性が高いこと、(イタリア語)期間ロケールで「」有効な小数点区切り記号ではありません。

-[NSNumberFormatter setDecimalSeparator:]を呼び出して正しい値に設定してください。

+0

おかげさまで、私はデバイスの現在のローカルでのcosがITとシミュレータen_USであることを疑っていました... [formatter setDecimalSeparator:@ "。"];そしてうまく働く...もう一度ありがとう – Valerio

1

私は、同じコンテキスト(座標の解析)で同じ問題を抱えていました。私はiOS 4.3です。私の使っていたiPadは、どちらもドイツ語に設定されているので、フォーマッタは同じように動作するはずですが、そうではありませんでした。私はこれを使ってしまった

シミュレータとデバイス上で動作
pi.latitude = [NSNumber numberWithDouble:[(NSString *)[coords objectAtIndex:0] doubleValue]]; 

関連する問題