【问题标题】:Make method work on object使方法对对象起作用
【发布时间】:2013-09-14 11:40:14
【问题描述】:

我正在尝试使用我已经创建的方法(我们称之为自定义方法)来执行操作。

基本上,我正在解析 JSON 信息并获取纬度(然后最终我将通过相同的方式获得 logitude,但不是相同的方法,如果有意义的话,不同的方法相同)。当我使用下面的内容时,它可以工作并且我得到了字符串。

NSString *mapStringLatitude = [[[[self.mapPlacesDictionary objectForKey:@"result"]objectForKey:@"geometry"]objectForKey:@"location"]valueForKey:@"lat"];

返回(通过NSLog):

mapStringLatitude: 37.790943

这是正确的。我想让代码更容易阅读。所以我想要一个像 getLatitude 这样的方法来为我进行深入研究。我在下面:

-(NSString *)getLatitude
{
    NSString *getLatitude = [[[[self.mapPlacesDictionary objectForKey:@"result"]objectForKey:@"geometry"]objectForKey:@"location"]valueForKey:@"lat"];
    return getLatitude;
}

我希望使用此方法而不是上面的行。基本上我在看这里:http://bit.ly/1bh9o9R

它指出[someobject method],我无法做到这一点,即[self.mapDictionary getLatitude] 不起作用。

有人对原因有什么建议吗?

按要求附上。善后。

【问题讨论】:

  • 1. “不工作”是什么意思精确?编译器错误?运行时错误? 2. 你知道你必须在你实现它的对象上调用方法吗?如果getLatitude 方法不是NSDictionary 的一部分而是另一个类,则[dict getLatitude] 将不起作用。 3. 不要在你的方法前面加上get,这不是Java。 Getter 没有那个前缀,而是更喜欢latitude
  • Xcode 自动完成,我无法自动完成。好的,我将删除 get, 习惯。然后我尝试了 ViewController *c = [ViewController alloc]init] 然后 c.mapPlacesDictionary 仍然没有运气。当我尝试 [self getLatitude] 时,它会编译,但会在运行时崩溃。你知道我怎么能用这样的方法吗?
  • 如果它在运行时崩溃,请发布显示的错误消息。我怀疑你仍然在一个与你实现它不同的类的对象上调用它。
  • 我认为你做错的是:[self.mapDictionary getLatitude] 一定是[self getLatitude]
  • 不要在方法前加上get。这是为非常特殊的使用模式保留的,不是这样。它应该只是latitude

标签: ios objective-c methods


【解决方案1】:

您可以使用

使您的代码更短
NSString *latitude = [self.mapPlacesDictionary valueForKeyPath:@"result.geometry.location.lat"];

甚至像这样发疯:

#define kLatKeyPath @"result.geometry.location.lat"
/* ... later */
NSString *lat = [self.mapPlacesDictionary valueForKeyPath:kLatKeyPath];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 2017-05-16
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    相关资源
    最近更新 更多