0

私はiPhoneアプリケーションを開発していますが、メソッドでその警告が表示されます。

NSNumber *latitudeValue;
NSNumber *longitudeValue;

[self obtainLatitude:latitudeValue longitude:longitudeValue];

メソッドは次のように宣言されます。

- (void) obtainLatitude:(NSNumber *)latitudeValue longitude:(NSNumber *)longitudeValue {

    NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
    [f setNumberStyle:NSNumberFormatterDecimalStyle];

    latitudeValue = [f numberFromString:[latitude.text stringByReplacingOccurrencesOfString:@"," withString:@"."]];
    longitudeValue = [f numberFromString:[longitude.text stringByReplacingOccurrencesOfString:@"," withString:@"."]];

    [f release];
}

ご覧のとおり、計算latitudeValueしてlongitudeValue呼び出しようとしobtainLatitude:longitude:ていますが、何か間違ったことをしています。

どうすればそのエラーを修正できますか?

4

2 に答える 2

5

Elfredの答えは機能しますが、NSError**以外のパラメーターの参照渡しは非常にまれです。同様に、座標(一般に数値)は、構造内の通常の古いCタイプに格納されるのが最も一般的です。これは、NSNumberがかなりのオーバーヘッドであるためです(いくつかの場合、大したことではありません。数十、数百、または数千の座標がある場合は問題が発生します)。

何かのようなもの:

struct MyLocation {
  CGFloat latitude;
  CGFloat longitude;
};
typedef struct MyLocation MyLocation;

それで:

- (MyLocation) mapCoordinates {
    MyLocation parsedLocation;

    parsedLocation.latitude = ....;
    parsedLocation.longitude = ....;

    return parsedLocation;
}

上記のようなものは、iPhone/Cocoaプログラムでより一般的です。

Daveが指摘しているように、このために独自の型を定義する必要はありません。CLLocationCoordinate2DまたはCLLocationを使用します。

于 2010-06-26T17:12:07.320 に答える
2

実際にポインタを値で渡しているので、ポインタを再割り当てすると、メソッド内で有効になります。1つの代替方法は、次のことを行うことです。

- (void) obtainLatitude:(NSNumber **)latitudeValue longitude:(NSNumber **)longitudeValue {

    NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
    [f setNumberStyle:NSNumberFormatterDecimalStyle];

    *latitudeValue = [f numberFromString:[latitude.text stringByReplacingOccurrencesOfString:@"," withString:@"."]];
    *longitudeValue = [f numberFromString:[longitude.text stringByReplacingOccurrencesOfString:@"," withString:@"."]];

    [f release];

}

その場合、通話は次のようになります。

NSNumber *latitudeValue;
NSNumber *longitudeValue;

[self obtainLatitude:&latitudeValue longitude:&longitudeValue];
于 2010-06-26T17:00:27.690 に答える