【问题标题】:Simple question from a novice iPhone programmer来自 iPhone 新手程序员的简单问题
【发布时间】:2011-07-07 20:56:19
【问题描述】:

对于我意识到可能是一个非常简单的问题,我深表歉意 - 我对编程很陌生,对你们大多数人来说可能非常简单,我已经苦苦挣扎了很长一段时间。

基本上,我一直在开发一个简单的天气应用程序,该应用程序从 Google 天气 API 获取信息。设置 API 后,您只需将城镇名称或邮政编码附加到 URL 的末尾即可。

query = @"toronto,on";

CXMLDocument *parser = [[[CXMLDocument alloc] initWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.google.com/ig/api?weather=%@", query]] options:0 error:nil] autorelease];

如您所见,通过更改“查询”值,我可以控制获取天气的城镇或城市。该应用程序的其余部分运行良好 - 显示天气数据并且大部分情况下是可靠的。但是,它只显示我在应用程序中编码的任何城市的天气,使其对除我所在城市的居民之外的任何人都无用。

我的问题是,首先提示用户输入他们的位置,然后获取该位置并使其等于“查询”字符串的最简单方法是什么。

正如我所说,这可能是一个非常简单的问题,但是对于一般的编程来说,我已经为此苦苦挣扎了很长一段时间。我很乐意通过 PayPal 支付几块钱来回复完全回答我的问题。

如果您需要更多信息来更好地回答问题,请随时提出,我很乐意提供。

再次感谢!

【问题讨论】:

    标签: iphone objective-c weather


    【解决方案1】:

    我建议使用定位服务,这样您的用户根本不需要输入他/她的位置。看看这里:Understanding Location Services

    在这个S.O. article 中,您将找到一个单例类,它应该为您提供当前位置。为了使用这个类,我会在你的主控制器中这样做(或者当你想更新你的位置时):

     ...
     CLLocation *myLocation = [[LocationManager sharedInstance] currentLocation];
     if ([[LocationManager sharedInstance] locationKnown]) {
          [self updateWeatherInfo];
     } else {
          [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(checkLocation:) userInfo:nil repeats:YES];
     }
     ...
    

    checkLocation提供一个实现:

    - (void)checkLocation:(NSTimer*)theTimer {
         if ([[LocationManager sharedInstance] locationKnown) {
              [theTimer invalidate];
              [self updateWeatherInfo];
         }
    }
    

    其中updateWeatherInfo 是您提供的从服务器检索新天气预报的方法。在该方法中,您可以使用下面示例中的代码将您的 currentLocation 转换为城市名称。

    This is a full sample 来自 Apple,展示了如何从您的位置获取您当前的地址(国家、城市或街道)。

    我想,你需要的差不多。

    【讨论】:

    • 感谢您的回答,我仍然对如何在 S.O. 中实现该类感到有些困惑。您发布的文章 - 您能详细说明一下吗?
    • 非常感谢塞尔吉奥的帮助,非常感谢。这可能是另一个非常明显的问题,但我有点不确定我应该如何将单例类放入我的程序中。到目前为止,我创建了一个名为 LocationController 的新类,其中包含来自发布在另一个线程中的类的代码副本。当我尝试使用您发布的代码来实现它时,我收到一个错误,即“LocationManager”未声明。有什么想法吗?
    【解决方案2】:

    最简单的方法是在 UITextField 中提示用户输入他们的 6 位数邮政编码,然后在查询中使用该文本。只需确保它是 6 位数字,并且事先只有数字。

    如果您正在为这样的事情苦恼,我强烈建议您观看 iTunes U 上提供的斯坦福 iOS 课程。前几门课程将向您展示您可能想要开发的大部分内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 2021-09-29
      • 2010-12-24
      • 2011-04-06
      • 1970-01-01
      相关资源
      最近更新 更多