iOs(CoreLocation)-locationManager:didUpdateLocations:未按预期工作

2024-04-05

我编写了一个简单的 iPhone 应用程序,用于检索位置信息并简单地显示它们。 我想增加distanceTraveled每次位置改变时都会变量。 我的问题是在方法中locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations, locations.count总是等于一。我以为每次调用该方法时都会向数组添加一个元素,但似乎并非如此......

我正在模拟器中运行该应用程序(我现在没有设备)。

这是我的代码:

// BIDViewController.h

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>

@interface BIDViewController : UIViewController <CLLocationManagerDelegate>

@property (strong, nonatomic) CLLocationManager *locationManager;
@property (strong, nonatomic) CLLocation *startingPoint;

@property (strong, nonatomic) IBOutlet UILabel *latitudeLabel;
@property (strong, nonatomic) IBOutlet UILabel *longitudeLabel;
@property (strong, nonatomic) IBOutlet UILabel *horizontalAccuracyLabel;
@property (strong, nonatomic) IBOutlet UILabel *altitudeLabel;
@property (strong, nonatomic) IBOutlet UILabel *verticalAccuracyLabel;
@property (strong, nonatomic) IBOutlet UILabel *distanceTraveledLabel;

@end



// BIDViewController.m :

#import "BIDViewController.h"

@interface BIDViewController ()

@property (strong, nonatomic)CLLocation *currentLocation;
@property (strong, nonatomic)CLLocation *lastLocation;
@property CLLocationDistance distanceTraveled;

@end

@implementation BIDViewController

@synthesize latitudeLabel;
@synthesize locationManager;
@synthesize longitudeLabel;
@synthesize startingPoint;
@synthesize altitudeLabel;
@synthesize distanceTraveledLabel;
@synthesize horizontalAccuracyLabel;
@synthesize verticalAccuracyLabel;
@synthesize currentLocation;
@synthesize lastLocation;
@synthesize distanceTraveled;

- (void)viewDidLoad
{
    [super viewDidLoad];

    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    //locationManager.distanceFilter = 10.0f;

    [locationManager startUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    if (startingPoint == nil) {
        startingPoint = [locations lastObject];
        NSLog(@"first time -- locations.count = %d", locations.count);
        distanceTraveled = 0;
        distanceTraveledLabel.text = @"0m";
    }
    else if (locations.count > 1) {
        NSLog(@"into the else if -- locations.count = %d", locations.count);
        lastLocation = locations[locations.count -2];
        distanceTraveled = distanceTraveled + [currentLocation distanceFromLocation:lastLocation];
        distanceTraveledLabel.text = [NSString stringWithFormat:@"%gm", distanceTraveled];
    }

    NSLog(@"locations.count = %d", locations.count);

    currentLocation = [locations lastObject];

    latitudeLabel.text =
        [NSString stringWithFormat:@"%g\u00B0", currentLocation.coordinate.latitude];
    longitudeLabel.text =
        [NSString stringWithFormat:@"%g\u00B0", currentLocation.coordinate.longitude];
    horizontalAccuracyLabel.text =
        [NSString stringWithFormat:@"%gm", currentLocation.horizontalAccuracy];
   verticalAccuracyLabel.text =
        [NSString stringWithFormat:@"%gm", currentLocation.verticalAccuracy];
    altitudeLabel.text =
        [NSString stringWithFormat:@"%gm", currentLocation.altitude];

}

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
    NSString *errorString = [[NSString alloc] init];

    switch (error.code) {
        case kCLErrorLocationUnknown:
            errorString = @"Location unknown";
            break;

        case kCLErrorDenied:
            errorString = @"Access denied";
            break;

        case kCLErrorNetwork:
            errorString = @"No network coverage";
            break;

        case kCLErrorDeferredAccuracyTooLow:
            errorString = @"Accuracy is too low to display";
            break;

        default:
            break;
    }

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error getting location"
                                                    message:errorString
                                                   delegate:nil
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles:nil];
    [alert show];
}

@end

这是记录器的样子:

2012-11-21 11:28:34.882 WhereAmI[652:11c03] first time -- locations.count = 1
2012-11-21 11:28:34.897 WhereAmI[652:11c03] locations.count = 1
2012-11-21 11:28:35.835 WhereAmI[652:11c03] locations.count = 1
2012-11-21 11:28:36.835 WhereAmI[652:11c03] locations.count = 1
2012-11-21 11:28:37.836 WhereAmI[652:11c03] locations.count = 1
2012-11-21 11:28:38.836 WhereAmI[652:11c03] locations.count = 1
2012-11-21 11:28:39.837 WhereAmI[652:11c03] locations.count = 1
2012-11-21 11:28:40.837 WhereAmI[652:11c03] locations.count = 1
2012-11-21 11:28:41.838 WhereAmI[652:11c03] locations.count = 1
2012-11-21 11:28:42.839 WhereAmI[652:11c03] locations.count = 1

等等...

有什么建议吗?谢谢大家,一如既往,对英语不好表示抱歉!


模拟器不会返回多个位置,因为它使用您计算机的位置,因此您可以获得 Wi-Fi 的精度,仅此而已,除非您在运行时更改为其他地方的另一个 Wi-Fi 网络,否则它永远不会返回更高的精度/不同的位置。

如果您正在移动的实际设备上进行测试,或者设备首先为您提供手机信号塔的精度,然后是 Wi-Fi,然后是 GPS 精度,您将收到阵列中的多个位置。

希望这能解决问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOs(CoreLocation)-locationManager:didUpdateLocations:未按预期工作 的相关文章

  • NSTimer 不触发选择器

    在带有 ARC 的 ios5 0 中 在我的 rootviewcontroller 中 我调用由应用程序委托持有的安全管理器对象中的方法 在该方法中 我设置计时器如下 NSTimer timer NSTimer scheduledTimer
  • XCode 4.5 给我“SenTestingKit/SenTestKit.h”文件未找到,但适用于 4.4.1

    我刚刚安装了 XCode 4 5 它在我现有的项目之一上给了我一个 SenTestingKit SenTestingKit h 文件未找到错误 此错误仅发生在 XCode 4 5 中 但它在 4 4 1 上编译正常 我已经检查过SenTes
  • NSCFData fastCharacterContents 崩溃? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我目前在控制台中收到此崩溃日志 20
  • AWS S3 公共对象与私有对象?

    回到 S3 我的存储桶中有图像的 URL 我将在我的应用程序中呈现这些图像 但它们被设置为私有 当我尝试单击该链接时 它显示 访问被拒绝 当我将链接的设置更改为公共时 它会通过 但是我读到公共访问并不是最安全的事情 所以这本质上是一个由两部
  • ios - Gamekit 的 GKOctree 未找到元素

    我正在尝试使用GKOctree https developer apple com documentation gameplaykit gkoctree用于高效检索 3D 空间中的对象 然而 以下代码似乎没有按预期工作 import Gam
  • SwiftUI:状态栏颜色

    有没有办法将 SwiftUI 视图的状态栏更改为白色 我可能错过了一些简单的东西 但我似乎找不到在 SwiftUI 中将状态栏更改为白色的方法 到目前为止我只看到 statusBar hidden Bool 状态栏文本 色调 前景色可以通过
  • Parse.com 和 Facebook 登录,运行无限循环

    我将 Parse 和 Facebook iOS SDK 都更新到了最新版本 当我尝试使用 Facebook 登录时 我的应用程序崩溃了 从调试器中我可以看到它正在无限循环中调用 3 4 个方法 我的登录代码如下所示 void openSes
  • 从命令行调试 iOS 应用程序构建

    我正在通过命令行构建 iOS 应用程序 但在调试它时遇到问题 如果我使用 XCode 进行构建 它会让我在设备上 构建和调试 而不会出现任何问题 但现在 我不知道如何使用 gdb 在设备上启动它并逐步执行它 如果我尝试 添加自定义目标 可执
  • 自定义 UITableViewCell 选择样式?

    当我点击我的UITableViewCell 当我单击单元格时 背景部分 我的背景图像未覆盖的区域 会变成蓝色 另外 所有的UILabel单击时单元格上的 s 变为白色 这就是我想要的 然而 我不想要的是当我点击它时的蓝色背景 但如果我这样做
  • 错误域=AVFoundationErrorDomain代码=-11814“无法记录”

    它不断给我错误 错误域 AVFoundationErrorDomain代码 11814 无法记录 我不确定问题是什么 我试图在拍照后计数器达到 1 时录制声音 static int counter counter will always b
  • 如何在 iOS 中更改部分透明图像的颜色?

    我有一个具有部分透明度的单色图像 我有正常版本和 2X 版本的图像 我希望能够用代码将图像着色为不同的颜色 下面的代码适用于普通图像 但 2X 最终会出现伪影 正常图像可能有类似的问题如果是这样 由于分辨率的原因我无法检测到它 UIImag
  • 推入 UINavigationController 时隐藏 FBFriendPickerViewController 导航栏

    介绍一个实例FBFriendPickerViewController using presentViewController animated completion 非常简单 该类似乎是针对该用例的 但是 我想推送一个实例FBFriendP
  • 架构armv7的重复符号

    尝试在我现有的应用程序中使用 Layar SDK 时出现以下错误 我该如何解决这个问题 Ld Users pnawale Library Developer Xcode DerivedData hub afxxzaqisdfliwbzxbi
  • UICollectionView 拖放文件夹创建

    我正在使用 UICollectionView 创建 iOS 画廊应用程序 我希望用户能够拖放图像来重新排序图库并创建文件夹 类似于 iPhone 上的主屏幕 我发现了以下内容tutorial http nshint io blog 2015
  • iOS 循环对象的属性并添加操作

    我有一个具有几个类似属性的类 UISliders 我想添加用户开始和结束使用每个滑块时的操作 每个滑块都将链接到同一个选择器 因此我考虑只是迭代它们 而不是编写 10 个几乎相同的代码块 问题是 最有效的方法是什么 我尝试过这样的事情 在运
  • Google 地图 API -> OpenGLES 崩溃

    日志是从 Crashlytics 粘贴的 对于许多用户来说 崩溃经常发生 据我所知 它与设备 iOS 版本无关 我在我的代码中找不到任何错误 这似乎是纯粹的库问题 是 Google 地图 API 错误吗 我可以做些什么来修复它 或者我应该在
  • NVActivityIndi​​catorView 仅适用于特定视图

    我正在使用这个库https github com ninjaprox NVActivityIndi catorView https github com ninjaprox NVActivityIndicatorView用于显示加载指示器
  • 避免 UIImage 的 imageNamed - 内存管理

    我正在经历这个链接 http akosma com 2009 01 28 10 iphone memory management tips 我遇到了一个点避免 UIImage 的 imageNamed 出于什么原因我们应该避免这种情况 它会
  • 分发内部业务 IOS 应用程序

    我遇到了 IOS 应用程序分发的一个令人困惑的部分 因此 我需要简单细分一下我的限制 即仅将我的应用程序分发给我的员工 同事或任何被视为 内部 的人 这是表明我不希望该应用程序出现在应用程序商店中的另一种方式 我的情况是我为几家公司开发 他
  • IPV6 快速可达性

    我是 swift 和 xcode 的新手 并且我的应用程序因 IPV6 而被拒绝 性能 2 1 当我们执行以下操作时 您的应用程序会在运行 iOS 9 3 5 并连接到 IPv6 网络的 iPad 和 iPhone 上崩溃 具体来说 当我们

随机推荐

  • Scala 的 '::' 运算符,它是如何工作的?

    在 Scala 中 我可以创建一个案例类 case class Foo x Int 然后将其放入列表中 如下所示 List Foo 42 现在 这里没什么奇怪的了 以下内容对我来说很奇怪 运营商 是列表上的函数 对吗 对于 Scala 中任
  • 如何加密配置文件、grails [和 java] 中的密码

    我正在寻找如何在 grails 中逐步保护配置文件中的密码 这意味着保护 Config groovy 和 DataSource groovy 中的密码 有很多谷歌结果包含了一些答案 但没有关于如何做到这一点的简明指南 有人可以指出我正确的方
  • PowerShell ScriptBlock 和多个函数

    我编写了以下代码 cls function GetFoo function GetBar bar bar bar foo foo bar GetBar foo bar cred Get Credential firmwide srabhi
  • 如何检测 NSURLConnection 的 sendSynchronousRequest:returningResponse:error: 最终是否超时或其他错误

    I use NSURLConnection s sendSynchronousRequest returningResponse error 方法 在单独的NSOperation线程 连接到外部服务器以检索数据 我如何知道操作是否超时结束或
  • 如何保存 JavaFX GUI 状态?

    是否有一种现有的简单方法来持久保存 JavaFX GUI 状态 包括节点的 userData 字段的自定义 反 序列化 None
  • 根据 Django 数据库中的某个字段获取不同的行

    我需要在 Django 中构建一个查询 我想知道这是否可能 它可能非常明显 但我错过了 我有一个正常的查询Model objects filter x True 5 它可以返回这样的结果 FirstName LastName Country
  • 为什么 jQuery.cssRule 插件必须向所有样式表添加规则?

    我尝试使用 cssRule 插件 http plugins jquery com project jquerycssrule并发现在 FireBug 中调试这些规则很不方便 因为每个规则似乎都附加到我的页面上加载的每个 css 文件 因此定
  • 从非托管 C++ 调用托管代码 (c#) 的最佳方法

    我们开发了一个软件架构 由用 C 开发的一组对象组成 他们广泛使用事件来通知客户端状态变化等 最初的目的是允许遗留代码通过 COM 互操作服务使用这些托管对象 这在设计规范中很容易编写 但我发现实际实现它会遇到更多问题 我已经搜索了很多小时
  • python 2.6+ (win32) 上的 mysqldb

    我目前正在使用 python 2 6 我想使用 win32 mysqldb 模块 不幸的是 它似乎需要 2 5 版本的 Python 有什么方法可以消除版本号中的这种不匹配并使用 python 2 6 安装 mysqldb 吗 有适用于 p
  • 使用 Java 从 Google Drive 获取列表文件 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有关您编写的代码的问题必须描述具体问题 and 包含有效代码重现它 在问题本身中 看SSCCE org http sscce org 以获
  • 闪亮的滑块限制释放鼠标左键的反应

    我正在使用 Shiny 应用程序 其中可能需要一些时间才能将滑块设置为正确的值 因此 在尝试将滑块设置为正确的值 并且不释放鼠标左键 时 即我的本地 服务器观察到几个新值并做出相应反应 由于我的服务器对任何新值的响应可能需要几秒钟 如果我可
  • 有没有一种方法可以有效地生成包含数百万个文件的目录中的每个文件?

    我知道os listdir 但据我所知 它将目录中的所有文件名放入内存 然后返回列表 我想要的是一种生成文件名 对其进行处理 然后生成下一个文件名的方法 而不会将它们全部读入内存 有什么办法可以做到这一点吗 我担心使用这种方法更改文件名 添
  • Rails 4.0 中的多个“root to”路线

    我试图让 Rails 根据子域转到不同的控制器 action 这就是我迄今为止在routes rb中所拥有的 Petworkslabs Application routes draw do get to custom show constr
  • R 并排分组箱线图

    我有两种植物气体排放的时间数据 这两种植物都经过了相同的处理 和一些以前的帮助 https stackoverflow com questions 23848186 unify boxplot factor group colours 23
  • Oauth 2.0 - 单个资源服务器但多个客户端应用程序

    问候 我想问以下是否是 Oauth 2 0 的有效用例 授权服务器 单独 单个 或多个 资源服务器 多个客户端应用程序访问同一资源服务器 如果这是一个有效的用例 我们如何使用授权服务器配置多个客户端 无法使用 application pro
  • 如何用 SUBSTITUTE 公式替换 Excel 中的引号?

    我有工作表 其中需要命名范围来对应于另一个单元格的内容 单元格中的文本类似于 Partitions w Studs 16 oc 命名范围不能包含空格 或者最重要的是 不能包含 等特殊字符 因此 该范围的命名如下 PartitionswStu
  • clojure lein(读取行)stdin 问题

    所以常规的 clojure repl 工作得很好 read line 收集输入 然后回显它 使用lein repl但是 它永远不会回显任何输入字符 也不允许我从任何标准输入读取命令返回 我确信这与重新绑定有关in 但想知道是否有解决方法 修
  • Tablayout+view 分页器未在位置 0 显示片段

    我的应用程序有 2 个选项卡 具有两种不同的布局 当我运行应用程序时 应该在 tab1 位置 0 中显示的片段显示在 tab2 中 而应该在 tab2 位置 1 中显示的片段没有显示 此外 当我滑动屏幕时 选项卡布局中的选项卡焦点不会改变
  • PDF - 设置受密码保护的打印、复制、粘贴选项?

    我正在寻找一个 Python 库 它允许我在现有 PDF 文件上设置受密码保护的打印 复制 粘贴选项 我尝试过的 我查看了reportlab pdfencrypt模块 这正是我需要的选项 但是开源版本受到严格限制 甚至无法设置真正的密码 并
  • iOs(CoreLocation)-locationManager:didUpdateLocations:未按预期工作

    我编写了一个简单的 iPhone 应用程序 用于检索位置信息并简单地显示它们 我想增加distanceTraveled每次位置改变时都会变量 我的问题是在方法中locationManager CLLocationManager manage