那便是说是时候升级须求进步的第③方库了,   假诺没有打开定位 

贰 、iOS8 上边定位功效应用改变了

事先版本的SDk是这么起步系统定点的
<pre><code> // 判断定位操作是还是不是被允许
if([CLLocationManager locationServicesEnabled]) {
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
[locationManager startUpdatingLocation];
}else {
//提示用户不可能展开一定操作
}
</code></pre>假使在iOS8下用这样的方法,你会发觉不大概稳定,那是因为iOS8下添加了新的办法
<pre><code> /表示使用应用程序时期 开启定位

  • (void)requestWhenInUseAuthorization
    //表示向来 开启定位
  • (void)requestAlwaysAuthorization </code></pre>

两岸分别在于,iOS7 开始,有更强硬的后台运维效果,假设 用
requestAlwaysAuthorization 方法,则象征后台运营时也会用到定点
iOS8 下利用系统定点如下:
<pre><code> // 判断定位操作是不是被允许
if([CLLocationManager locationServicesEnabled]) {
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
//兼容iOS8定位
SEL requestSelector =
NSSelectorFromString(@”requestWhenInUseAuthorization”);
if ([CLLocationManager authorizationStatus] ==
kCLAuthorizationStatusNotDetermined &&
[locationManager respondsToSelector:requestSelector]) {
[locationManager requestWhenInUseAuthorization];
} else {
[locationManager startUpdatingLocation];
}
return YES;
}else {
//提示用户无法展开定位操作
}
return NO; </code></pre>
再就是还索要添加新的主意,其余的都相同
<pre><code> – (void)locationManager:(CLLocationManager
*)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
if (status == kCLAuthorizationStatusAuthorizedWhenInUse) {
[locationManager startUpdatingLocation];
} else if (status == kCLAuthorizationStatusAuthorized) {
// iOS 7 will redundantly call this line.
[locationManager startUpdatingLocation];
} else if (status > kCLAuthorizationStatusNotDetermined) {
//…
[locationManager startUpdatingLocation];
}
} </code></pre>
除开这个,你还要求在 info.plist 里面添加新的键值,不然 也是不能够稳定的
<pre><code>//表示使用应用程序时期 开启定位

  • (void)requestWhenInUseAuthorization 对应
    NSLocationWhenInUseUsageDescription key
    //表示一贯 开启定位
  • (void)requestAlwaysAuthorization 对应
    NSLocationAlwaysUsageDescription key</code></pre>

中间,NSLocationWhenInUseUsageDescription(恐怕NSLocationAlwaysUsageDescription)
对应的文字会在率先次呼吁用户同意定位的时候出现,还有 设置 > 隐秘 >
定位 > your app 里面也会看出,比如上边就是开启app时出现的

图片 1

    longitudeStr = [NSString
stringWithFormat:@”%f”,currentLocation.coordinate.longitude];

一 、SDK 里面包车型大巴少数API不可能在iOS8下使用

若果,你的老品种在iOS8下运转,打开就闪退(iOS8事先没难题),那么“恭喜您”,你高级中等学校招生了,比如上边作者碰着的,是因为旧版本的高德地图引用了
iOS8
里面不能用的api,如若你也亟需接近的难点,那么是时候升级须要进步的第②方库了。
<pre><code>2014-09-28 14:32:25.576
WoZaiXianChang[4505:140022] *** Terminating app due to uncaught
exception ‘NSInvalidArgumentException’, reason: ‘-[UIDevice
asUniqueDeviceIdentifier]: unrecognized selector sent to instance
0x7c020080’ </code></pre>

#pragma mark ——定位战败

④ 、iOS8 cell 层级的更改

假如您像这么取cell 的row
的话,那你又要加个判断情势了,在iOS8下cell的层级又改了,基本上每升级二个版本,苹果都会对cell的构造实行调整,在此提议并非用这么的章程取cell
的row,而是用属性的措施保留 indexPath
<pre><code>NSUInteger curRow = 0;
if ([[MetaData getOSVersion] integerValue] == 7)
{
curRow = [(UITableView *)[[self superview] superview]
indexPathForCell:self].row;
}
else
{
curRow = [(UITableView *)[self superview]
indexPathForCell:self].row;
} </code></pre>

        _locationManager.delegate = self;

三 、iOS8 下报了名公告的更改

本条毫无多说,直接看代码就精通了,有某个急需留意的是,鲜绿部分必需要加,不然便是能取的token值,app
接受到的推送也是冷静的。
<pre><code>//注册消息文告
if (IOS8After) {
[[UIApplication sharedApplication]
registerForRemoteNotifications];
<span style=”color:#3333ff;”>[[UIApplication
sharedApplication]
registerUserNotificationSettings:[UIUserNotificationSettings
settingsForTypes:UIUserNotificationTypeBadge |
UIUserNotificationTypeSound | UIUserNotificationTypeAlert
categories:nil]];</span>
}
else {
[[UIApplication sharedApplication]
registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert |
UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge)];
} </code></pre>

        }

5、UIActionSheet and UIAlertView 的升级

在iOS8里面,官方提供了新的类UIAlertController来替换UIActionSheet and
UIAlertView。
以身作则代码如下:
<pre><code>
UIAlertController* alert = [UIAlertController
alertControllerWithTitle:@”My Alert”
message:@”This is an alert.”
preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@”OK”
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {}];

[self presentViewController:alert animated:YES completion:nil];
</pre></code>
有关为啥为加这几个类,本身推测是和iOS8新加的size
classes有关,指标是联合显示屏在挨家挨户尺寸各类方向上的展现。若是您在iOS 8
里面使用UIActionSheet and UIAlertView
大概会产出有的很意外的标题,提议在iOS 8 里面使用UIAlertController,iOS
8 在此以前使用UIActionSheet and UIAlertView
那是如今截至发现的 iOS8 包容性问题,我们发现其他包容性难题,一起谈论哦
正文在csdn下边也有发表:http://blog.csdn.net/wangyangyangcc/article/details/39637787

        //设置寻址精度

自打苹果集团在六月17号开放升级的话,官方展现iOS8一度有49%的份额,微信,支付宝,和讯博客园等也一度包容iOS8,对于开发者来说,包容iOS8
也是自然的政工。上面说几点本身在包容iOS8时,发现的几点难题。

        [_locationManager requestWhenInUseAuthorization];

先添加Corelocation.framework框架

        _locationManager.distanceFilter = 5.0;

/*恒定打响后则履行此代理方法*/

}

        _locationManager.desiredAccuracy = kCLLocationAccuracyBest;

#pragma mark 定位打响

        if (latitudeStr == nil) {

        [_locationManager requestAlwaysAuthorization];

    

/*身份退步则执行此代理方法*/

            [self presentViewController:alert animated:YES
completion:nil];

    UIAlertAction * cacel = [UIAlertAction actionWithTitle:@”取消”
style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull
action) {

    [_locationManager stopUpdatingLocation];

    [self presentViewController:alert animated:YES completion:nil];

   如若没有开启定位 

    

        [_locationManager requestAlwaysAuthorization];

if ([CLLocationManager locationServicesEnabled]) {

增进代办CLLocationManagerDelegate

 

 在急需的地点写下

在急需固定的地点 

        //设置寻址精度

在info.plist中添加

    }

    

@property(nonatomic,strong)CLLocationManager *locationManager;

    /*打字与印刷当前经纬度*/

                [[UIApplication
sharedApplication]openURL:settingsURL];

        [_locationManager requestWhenInUseAuthorization];      

        [[UIApplication sharedApplication]openURL:settingsURL];

/*恒定战败弹出提示窗,点击打开定位按钮
按钮,会打开系统设置,提醒打开定位服务*/

        _locationManager = [[CLLocationManager alloc]init];

Privacy – Location When In Use Usage Description        string
-需求您的同意 才能访问地方

        

    }];

    UIAlertController * alert = [UIAlertController
alertControllerWithTitle:@”获取一定才能成立简历”
message:@”请在安装中开辟定位”
preferredStyle:UIAlertControllerStyleAlert];

在APPdelegate.m中  那里 运营的时候提示一回

    CLLocation * currentLocation = [locations lastObject];

        _locationManager.distanceFilter = 5.0;

            [alert addAction:cacel];

   
NSLog(@”%f%f”,currentLocation.coordinate.latitude,currentLocation.coordinate.longitude);

}

            UIAlertAction * cacel = [UIAlertAction
actionWithTitle:@”取消” style:UIAlertActionStyleCancel
handler:^(UIAlertAction * _Nonnull action) {

#import <CoreLocation/CoreLocation.h>  

    UIAlertAction * ok =[UIAlertAction actionWithTitle:@”打开定位”
style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull
action) {

            }];

        NSURL * settingsURL = [NSURL
URLWithString:UIApplicationOpenSettingsURLString];

    }

    [alert addAction:ok];

            return;

        _locationManager = [[CLLocationManager alloc]init];

#import <CoreLocation/CoreLocation.h>  

@property(nonatomic,strong)CLLocationManager *locationManager;//定位

            /*设置提示提示用户打开定位服务*/

    latitudeStr = [NSString
stringWithFormat:@”%f”,currentLocation.coordinate.latitude];

        _locationManager.desiredAccuracy = kCLLocationAccuracyBest;

            [alert addAction:ok];

  if ([CLLocationManager locationServicesEnabled]) {

        

        [_locationManager startUpdatingLocation];

            UIAlertAction * ok =[UIAlertAction
actionWithTitle:@”打开定位” style:UIAlertActionStyleDefault
handler:^(UIAlertAction * _Nonnull action) {

    /*设置提示提醒用户打开定位服务*/

                NSURL * settingsURL = [NSURL
URLWithString:UIApplicationOpenSettingsURLString];

-(void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray<CLLocation *> *)locations{

 

        /*开辟定位装置*/

            UIAlertController * alert = [UIAlertController
alertControllerWithTitle:@”获取一定才能创设简历”
message:@”请在设置中打开定位”
preferredStyle:UIAlertControllerStyleAlert];

    /*旧值*/

        _locationManager.delegate = self;

        [_locationManager startUpdatingLocation];

    

-(void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error{

                /*打开定位装置*/

    // CLGeocoder * geoCoder = [[CLGeocoder alloc]init];

    }];

            }];

    [alert addAction:cacel];

丰硕代理CLLocationManagerDelegate

相关文章