有关ios8 中location没有起作用的问题

来源:互联网 发布:mysql emoji 编辑:程序博客网 时间:2024/05/16 01:28

好吧,从今天开始我将记录学习ios8开发的过程,不能保证很详细,但是会尽量的。

2015-09-20


今天按照youtube https://www.youtube.com/watch?v=qY4xCMTejH8


上的教程编好了程序,虽然注意到了视频里的



-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation


这个方法已经被xcode划上了删除线了,但是视频里的哥们仍然使用这个接口,查了一下这个接口是给ios6用的,在ios8上也可以用。而在ios8上用的应该是


locationManager:didUpdateLocations:


这点可以从apple的官网上查到:

https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManagerDelegate_Protocol/#//apple_ref/occ/intfm/CLLocationManagerDelegate/locationManager:didUpdateToLocation:fromLocation:


算了,就按照教程的接口用吧,反正也能用。但是,一切都按照教程的弄好了之后,点击那个按钮,愣是什么都没有出来,没有latitude,也没有longitude,仔细看了一下,连进入


-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation


之后的第一句打印都没有,这样的结果只有一个,那就是根本就没有调用这个接口。


我最烦的就是跟着教程做,然后却得到了不一样的结果这件事。没办法,又碰上了。

于是,用google搜了一下,找到了下面这个文章:


http://nevan.net/2014/09/core-location-manager-changes-in-ios-8/


http://stackoverflow.com/questions/25916841/cllocationmanager-startupdatinglocation-not-calling-locationmanagerdidupdateloc


http://nevan.net/2014/09/core-location-manager-changes-in-ios-8/


原来是ios8偷偷的做了改变,卧槽,这种改变还没有任何的提示。


按照改变的设置弄好后,再按button,出来了一堆错误:



2015-09-20 21:07:20.021 coreLocation[2668:87749] pressed me.

2015-09-20 21:07:20.028 coreLocation[2668:87749] Error Error Domain=kCLErrorDomain Code=0 "The operation couldn’t be completed. (kCLErrorDomain error 0.)"

2015-09-20 21:07:20.028 coreLocation[2668:87749] failed to get the location

2015-09-20 21:07:39.786 coreLocation[2668:87749] pressed me.

2015-09-20 21:07:44.479 coreLocation[2668:87749] pressed me.

2015-09-20 21:07:45.368 coreLocation[2668:87749] pressed me.

2015-09-20 21:07:45.831 coreLocation[2668:87749] location <+37.33233141,-122.03121860> +/- 50.00m (speed -1.00 mps / course -1.00) @ 9/20/15, 9:07:45 PM China Standard Time

2015-09-20 21:07:45.831 coreLocation[2668:87749] -[UIView setText:]: unrecognized selector sent to instance 0x7ff17bc3c750

2015-09-20 21:07:45.832 coreLocation[2668:87749] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView setText:]: unrecognized selector sent to instance 0x7ff17bc3c750'

*** First throw call stack:

(

0   CoreFoundation                      0x000000010c2f5c65 __exceptionPreprocess + 165

1   libobjc.A.dylib                     0x000000010bf8ebb7 objc_exception_throw + 45

2   CoreFoundation                      0x000000010c2fd0ad -[NSObject(NSObject) doesNotRecognizeSelector:] + 205

3   CoreFoundation                      0x000000010c25313c ___forwarding___ + 988

4   CoreFoundation                      0x000000010c252cd8 _CF_forwarding_prep_0 + 120

5   coreLocation                        0x000000010b9d2bfd -[ViewController locationManager:didUpdateToLocation:fromLocation:] + 317

6   CoreLocation                        0x000000010ba6700d CLClientGetCapabilities + 20302

7   CoreLocation                        0x000000010ba63613 CLClientGetCapabilities + 5460

8   CoreLocation                        0x000000010ba5e38b CLClientInvalidate + 907

9   CoreFoundation                      0x000000010c22941c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12

10  CoreFoundation                      0x000000010c21f165 __CFRunLoopDoBlocks + 341

11  CoreFoundation                      0x000000010c21ef25 __CFRunLoopRun + 2389

12  CoreFoundation                      0x000000010c21e366 CFRunLoopRunSpecific + 470

13  GraphicsServices                    0x000000010e4d8a3e GSEventRunModal + 161

14  UIKit                               0x000000010c6ee8c0 UIApplicationMain + 1282

15  coreLocation                        0x000000010b9d363f main + 111

16  libdyld.dylib                       0x000000010eee0145 start + 1

)

libc++abi.dylib: terminating with uncaught exception of type NSException

(lldb) 


与教程里的结果仔细对比这个错误报告,发现了第1处红色的那一行日志:
2015-09-20 21:07:20.028 coreLocation[2668:87749] Error Error Domain=kCLErrorDomain Code=0 "The operation couldn’t be completed. (kCLErrorDomain error 0.)”


这个在教程里面也说了,是因为simulator没有开启gps仿真的功能,我就把simulator的定位功能打开了,然后就得到了第2处红色的日志:

2015-09-20 21:07:45.831 coreLocation[2668:87749] location <+37.33233141,-122.03121860> +/- 50.00m (speed -1.00 mps / course -1.00) @ 9/20/15, 9:07:45 PM China Standard Time


仔细看这个日志表明还是获得到了位置信息。然后后面的地方出了错误:

2015-09-20 21:07:45.831 coreLocation[2668:87749] -[UIView setText:]: unrecognized selector sent to instance 0x7ff17bc3c750


提示unrecognized selector sent to instance

是不是给label设置text的时候出现了错误?



这里给出了一个定位的方法,我试下了,可以停止,但是仍然不会使用定位的功能;

http://blog.objcc.com/unrecognized-selector-sent-to-instance/

添加断点:

-[NSObject(NSObject) doesNotRecognizeSelector:]




这里还有一篇文章,我刚看了个开头,看起来还不错,继续看看

http://www.tairan.com/archives/1006/



我草,找了半天才发现,原来这个方法比较靠谱,直接添加一个Exception Breakpoint 就能定位了。

http://www.tairan.com/archives/1006/


添加断点。然后再次运行就能定位了。 


注意看绿色高亮的那一行。其实在这之前我就怀疑是这一行了:)现在更加证实了。


接下来就是看看怎么修改。语法错误?调用错误?



不知道为什么,我重新按照教程做了一遍之后就可以定位了。

刚对比了一下,在失败的那个project中,用来显示latitude,longitude,address的3个label属性为strong,而视频中的属性为weak,虽然我手动改成了weak,但是运行还是有错误,后来就干脆重新创建了一个project,然后奇迹就发生了,完全没有错误了,而且也能选择模拟地点来。

我就不去追究问题了,大功告成了。

刚了xcode推送了通知,apple发布了xcode7,看看有什么新的特性,我记着有一个可以直接在iphone上运行的特性,就是说可以不用模拟器了。确认一下啊。这样可就有得玩了:)



下面的这个教程不错,可以仿照着做一个玩玩

https://www.shinobicontrols.com/blog/ios8-day-by-day-day-34-corelocation-authorization

0 0
原创粉丝点击