消息表达式中的值传递参数未定义

Van*_*nel 0 iphone objective-c argument-passing

我正在开发一个iPhone应用程序,并在方法中收到警告:

NSNumber *latitudeValue;
NSNumber *longitudeValue;

[self obtainLatitude:latitudeValue longitude:longitudeValue];
Run Code Online (Sandbox Code Playgroud)

该方法声明如下:

- (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];
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我正在尝试计算latitudeValuelongitudeValue调用,obtainLatitude:longitude:但我做错了.

我该如何解决这个错误?

bbu*_*bum 5

Elfred的答复工作,但传递通过引用非NSError**参数是相当罕见的.同时,坐标 - 数值,一般 - 最通常存储在普通的旧C型结构中,因为,相比之下,一个NSNumber是相当多的开销(没什么大不了几的他们,将是一个问题,如果你有几十,一百或几千个坐标).

就像是:

struct MyLocation {
  CGFloat latitude;
  CGFloat longitude;
};
typedef struct MyLocation MyLocation;
Run Code Online (Sandbox Code Playgroud)

然后:

- (MyLocation) mapCoordinates {
    MyLocation parsedLocation;

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

    return parsedLocation;
}
Run Code Online (Sandbox Code Playgroud)

像上面这样的东西在iPhone/Cocoa程序中更为典型.

正如Dave指出的那样,你真的不需要为此定义自己的类型.使用CLLocationCoordinate2D或CLLocation.