【问题标题】:Execute code after loading the iOS app加载 iOS 应用后执行代码
【发布时间】:2015-08-21 16:05:47
【问题描述】:

我正在构建一个天气应用程序。我有一个函数 getAllData:

- (void)getAllData {
    self.tempNowData = [self.getTempLibrary getTempNowData];
    self.iconNowData = [self.getTempLibrary getIconNowData];

    self.tempPlus3Data = [self.getTempLibrary getTempPlus3Data];
    self.iconPlus3Data = [self.getTempLibrary getIconPlus3Data];

    self.tempPlus6Data = [self.getTempLibrary getTempPlus6Data];
    self.iconPlus6Data = [self.getTempLibrary getIconPlus6Data];

    self.tempPlus9Data = [self.getTempLibrary getTempPlus9Data];
    self.iconPlus9Data = [self.getTempLibrary getIconPlus9Data];

    self.tempPlus12Data = [self.getTempLibrary getTempPlus12Data];
    self.iconPlus12Data = [self.getTempLibrary getIconPlus12Data];

    self.tempPlus15Data = [self.getTempLibrary getTempPlus15Data];
    self.iconPlus15Data = [self.getTempLibrary getIconPlus15Data];

    self.tempPlus24Data = [self.getTempLibrary getTempPlus24Data];
    self.iconPlus24Data = [self.getTempLibrary getIconPlus24Data];

    self.cityData  = [self.getTempLibrary city];
}

它调用 getTempLibrary 类,该类接受并解析 JSON 并提供数据。

还有函数setAllData(未完成,只设置一个值):

- (void)setAllData {
    self.tempNow.text = [NSString stringWithFormat:@"%@°C", self.tempNowData];
}

当我用按钮调用这个函数时,一切正常。

- (IBAction)refreshButton:(id)sender {

    [self getAllData];
    [self setAllData];
}

当我将相同的代码放入 viewDidLoad 时,它会显示纬度 0 和经度 0 的温度。我在 viewDidLoad 中检查 GPS 位置。

- (void)viewDidLoad {
    [super viewDidLoad];

    self.getTempLibrary = [[GetTemp alloc] init];
    [self.getTempLibrary getCurrentLocation];
    [self getAllData];
    [self setAllData];

}

我认为现在获取 GPS 位置还为时过早,但是当我通过按钮调用函数时,它可以工作(显示正确的温度)。

【问题讨论】:

  • 对不起,我添加了代码。
  • 显示您的 viewDidLoad 方法(未按预期工作的方法)。并定义“根本不起作用”。发生什么了?编译器错误?链接器错误?运行时错误?某些东西没有正确填充或根本没有填充?如果您需要帮助,您需要提供详细信息。
  • 再次编辑。真的很抱歉。
  • 您还没有告诉我们问题出在哪里。您说当从按钮调用代码时,“它可以工作”。什么有效?当您从viewDidLoad 调用代码时,什么“不起作用”?
  • 我什至不明白这个问题 :) GPS 在任何情况下都是异步的,因此您无法真正检查 viewDidLoad

标签: ios objective-c


【解决方案1】:

不要这样。请改用 NSOperationQueue

为 TempNow、TempPlus 等创建 NSOperation(s)。将这些操作添加到队列中,让它为您异步下载。你的方法需要顺便概括一下:)

PS:如果TempNow、TempPlus等之间没有依赖关系,可以用GCD代替。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-18
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多