好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

ios 7第一个应用程序HelloWorld

ios 7第一个应用程序HelloWorld

第一个应用程序HelloWorld

iOS7 Beta已经发布了,迫不及待地下载了iOS 7及Xcode 5并体验了一下。先做一个简单的Hello World看看都有哪些变化吧。
1. 启动 Xcode5-DP ;
2. 从菜单选择 File - New Project... ,弹出如下窗口:

注意,在此多了一个 SpriteKit Game 的模板,暂时先不管它,还是选择熟悉的 Single View Application ,然后单击Next按钮;
3. 在接下来的对话框的 Product Name 输入框中输入: HelloWorld ,如下图所示:

备注 :相比较 Xcode 4.6 版本,新建项目选项中没有了 Use Storyboards(使用故事板) 、 Use Automatic Reference Counting(使用自动引用计数) 和 Include Unit Tests(包含单元测试) 三个选项。
4. 单击 Next 按钮,在接下来的对话框中选择保存项目的位置,建议勾选上 Create git repository on My Mac 选项,虽然本文不准备涉及有关git的内容,不过使用代码管理器开发是一个非常好的习惯~_~。选择好位置之后,单击 Create 按钮。
5. 接下来Xcode会自动为您创建并打开项目,不过映入眼帘的是白茫茫一片啊,呵呵。先看下菜单有什么变化,见下图:


回顾一下4.6的菜单,见下图:

不难发现多了三项,分别是: Find(查找) 、 Debug(调试) 、 Source Control(源代码控制) 。具体细节朋友们可以自己探索一下,本文不再赘述了。
6. 单击下图中箭头位置的 Open project and targets list(打开项目及目标列表) 按钮;

7. 现在Xcode的界面有那么一丝熟悉的味道了,~_~,如下图所示:

标注1:可以选择开发者账号,如果您有多个开发者账号,在这里选择一个就可以了;
标注2:设置设备方向;
标注3:应用程序启动时是否隐藏状态栏;
备注 :除标注1是新增选项之外,其他两项是在Xcode4.6版本中都已经包含的,这几个选项也是在新建iOS项目时经常会修改的。
8. 向下滚动项目属性窗口,可以看到图标和应用程序图像设置属性,如下图所示:

备注: Images.xcassets 是Xcode 5的一个新特性,其引入的一个主要原因是为了方便应用程序同时支持iOS 6和iOS 7,具体内容本文暂不介绍,有兴趣的朋友可以参阅苹果官方的 iOS 7 UI Transition Guide 。
9. 单击项目属性的 Capabilities 选项卡,如下图所示:


其中包含了iCloud、Game Center、Passbook、IAP、Maps等功能的开关,并附有引入这些功能的简单提示~_~
OK,有关Xcode 5界面的变化,先简单先熟悉到这,下面完成一个简单的HelloWorld :]
9. 开始之前,先运行一下看看效果,如下图所示:

太平了,都看不见了,呵呵。
10. 单击Main.storyboard,添加一个Text Field,一个Label和一个Button,调整并设置各控件大小、位置以及默认文字,如下图所示:

11. 单击工具栏右侧中间的按钮,打开助理编辑器,并切换到 ViewController.h 文件,如下图所示:

12. 用Control+拖拽的方式,将Text Field和Label的IBOutlet拖拽到头文件中,并将Button的Action拖拽到头文件中,完成后的头文件如下所示:

 #import  <UIKit/UIKit.h>

 @interface   ViewController : UIViewController

@property (weak, nonatomic) IBOutlet UITextField  * helloText;
@property (weak, nonatomic) IBOutlet UILabel  * helloLabel;

 - (IBAction)clickHelloButton:( id  )sender;

  @end 

13. 单击上图中标注2的位置,切换到 ViewController.m 文件,使用如下代码替换clickHelloButton:方法:

- (IBAction)clickHelloButton:( id  )sender {
      //   清空空白字符 
    NSString *str =  [_helloText.text stringByTrimmingCharactersInSet:
                     [NSCharacterSet whitespaceAndNewlineCharacterSet]];
    
      if  (str.length >  0  ) {
        [_helloText setText:str];
        [_helloLabel setText:[NSString stringWithFormat:  @"  Hello %@!  "  , str]];
    }
} 

14. 运行应用程序,如下图所示:

搞定,收工!
下期预告:iOS7初体验之单元测试。

原创文章,如需转载请注明出处,谢谢!

欢迎访问本人技术微博  趣味苹果开发  相互交流,共同进步!

欢迎访问本人新浪微博  可可爸刘凡

用趣味的心态,开发有趣味的应用!

 

分类:  iOS开发 ,  工作随笔

标签:  iOS7 ,  HelloWorld

IOS定位核心与地图

IOS定位核心与地图

                

Core Location 以及 Map 框架包通常能给我们的应用程序添加定位和地图相关的服务。 Core Location 框架包通常是使用硬件设备来进行定位服务的, Map 框架包通常能够使你的应用程序做一些地图展示与交互的相关功能。地图的定位服务一般需要依赖设备的硬件组成部分。如果有定位的硬件设备,那么肯定是可以利用地图框架包来进行地图的一些相关的操作。

为了能够在项目中使用到位置服务以及地图展示的相关功能,你必须要导入 Core Location  和 Map 这两个框架包。如果你不知道怎么做,那么请参照如下步骤。

1. 点击你的项目工程图标文件。

2. 然后选择 target 选项,如图 1 所示。

3. 然后选择 Build Phase 模块栏。

4. 然后点开 Link Binary With Libraries 栏目,在点击 + 号按钮。

图 1  添加相关的框架包

5.添加MapKit.framework和CoreLocation.framework这两个库

6.在使用地图和定位的地方,导入:

#import <CoreLocation/CoreLocation.h>

#import <MapKit/MapKit.h>

MKMapView是UIView的子类,所以可以像一个普通的View一样添加到ViewController的View当中。

以下是相关的代码

ViewController.h

# import  <UIKit/UIKit.h>

# import  <CoreLocation/CoreLocation.h>

# import  <MapKit/MapKit.h>

# import  " MyAnnotation.h "

 

@ interface  ViewController : UIViewController <MKMapViewDelegate,CLLocationManagerDelegate>

 

// MapView

@property (nonatomic,strong) MKMapView *myMapView;// 地图控件

// LocationManager

@property (nonatomic,strong) CLLocationManager *myLocationManager;// 位置管理器

@property (nonatomic,strong) CLGeocoder *myGeoCoder ;// 地理位置和真实地址转换

@end

ViewController.m

# import  " ViewController.h "

# import  " MKMapView+ZoomLevel.h "

 

@ interface  ViewController ()

 

@end

 

@implementation ViewController

 

@synthesize myMapView;

@synthesize myLocationManager;

@synthesize myGeoCoder;

- ( void )viewDidLoad

{

    [ super  viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

     // 设置根View的背景颜色

    self.view.backgroundColor = [UIColor colorWithRed:0x33 / 255.0f green:0x66 / 255.0f blue:0x99 / 255.0f alpha:0xFF / 255.0f];

     // 初始化MapView并且设置MapView显示的边界

    self.myMapView = [[MKMapView alloc]initWithFrame:self.view.bounds];

// self.myMapView.mapType = MKMapTypeSatellite;

// self.myMapView.mapType = MKMapTypeHybrid;

    self.myMapView.mapType = MKMapTypeStandard;

    self.myMapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    self.myMapView. delegate  = self;

 

    CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(40.034122, 116.289574);

    MyAnnotation *annotation = [[MyAnnotation alloc]initWithCoordinate:coordinate title:@" 我的位置 " subTitle:@" 这里就是寡人的位置,嘿嘿! "];

    annotation.pinColor = MKPinAnnotationColorPurple;

 

    [self.myMapView addAnnotation:annotation];

 

 

    [self.myMapView setShowsUserLocation:YES];

    [self.myMapView setCenterCoordinate:coordinate zoomLevel:15 animated:YES];

 

    [self.view addSubview:myMapView];

 

 

     if ([CLLocationManager locationServicesEnabled]){

        self.myLocationManager = [[CLLocationManager alloc]init];

        self.myLocationManager. delegate  = self;

// // 提示用户是否允许当前应用使用地理位置,已过时,在Info.plist中使用NSLocationUsageDescription键值替换

// self.myLocationManager.purpose = @"提示用户是否允许当前应用使用位置,已过时";

        [self.myLocationManager startUpdatingLocation];

    } else {

        NSLog(@" >>>>>>>>>> 位置服务不可用 <<<<<<<<<<<< ");

        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@" 提示 " message:@" 您的位置服务当前不可用,请打开位置服务后重试 "  delegate :nil cancelButtonTitle:@" 确定 " otherButtonTitles:nil, nil];

        [alertView show];

    }

 

 

    CLLocation *location = [[CLLocation alloc]initWithLatitude:40.034122 longitude:116.289574];

 

    self.myGeoCoder = [[CLGeocoder alloc]init];

    [self.myGeoCoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks,NSError *error){

         if (error == nil && [placemarks count] > 0){

            CLPlacemark *pm = [placemarks objectAtIndex:0];

            NSLog(@" 国家:%@ " ,pm.country);

            NSLog(@" 邮编:%@ ",pm.postalCode);

            NSLog(@" Locality:%@ ",pm.locality);

        } else   if (error == nil && [placemarks count] == 0){

            NSLog(@" 没有地址返回 ");

        } else   if (error != nil){

            NSLog(@" 出错了:%@ ",error);

        }

    }];

 

    [self.myGeoCoder geocodeAddressString:@" 中国北京市海淀区花园东路10号高德大厦 " completionHandler:^(NSArray *placemarks,NSError *error){

         if (nil == error && [placemarks count] > 0){

            NSLog(@" placemarks count:%i ",[placemarks count]);

            CLPlacemark *pm = [placemarks objectAtIndex:0];

            NSLog(@" longitude=%f ",pm.location.coordinate.longitude);

            NSLog(@" latitude=%f ",pm.location.coordinate.latitude);

        } else   if ([placemarks count] == 0 && error == nil){

            NSLog(@" 找不到给定地址的经纬度 ");

        } else   if (nil != nil){

            NSLog(@" 发生了错误:%@ ",error);

        }

    }];

 

 

 

 

 

}

 

- ( void )didReceiveMemoryWarning

{

    [ super  didReceiveMemoryWarning];

     // Dispose of any resources that can be recreated.

 

}

-( void )viewDidUnload

{

    [ super  viewDidUnload];

    self.myMapView = nil;

    [self.myLocationManager stopUpdatingLocation];

    self.myLocationManager = nil;

}

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation

{

     return  YES;

}

 

 

/*******************************************************************************************/

/*******************************************************************************************/

/*************************** MapView的Delegate的方法,全部都是Option的 *************************/

/*******************************************************************************************/

/*******************************************************************************************/

/*******************************************************************************************/

 

- ( void )mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated {

    NSLog(@" mapView:regionWillChangeAnimated:方法被调用 ");

}

// 用户的地理位置发生改变的时候调用

- ( void )mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {

    NSLog(@" mapView:regionDidChangeAnimated:方法被调用 ");

}

// 当地图界面将要加载的时候将会调用这个方法

- ( void )mapViewWillStartLoadingMap:(MKMapView *)mapView{

    NSLog(@" mapViewWillStartLoadingMap:方法被调用 ");

}

// 当地图界面加载完成的时候将要调用这个方法

- ( void )mapViewDidFinishLoadingMap:(MKMapView *)mapView{

    NSLog(@" mapViewDidFinishLoadingMap:方法被调用 ");

}

// 当地图界面加载失败的时候调用这个方法

- ( void )mapViewDidFailLoadingMap:(MKMapView *)mapView withError:(NSError *)error{

    NSLog(@" mapViewDidFailLoadingMap:withError:方法被调用,error is:%@ " , [error description]);

}

// 添加到地图的Annotation

// mapView:viewForAnnotation: provides the view for each annotation.

// This method may be called for all or some of the added annotations.

// For MapKit provided annotations (eg. MKUserLocation) return nil to use the MapKit provided annotation view.

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation

{

    MKAnnotationView *view = nil;

     if ([annotation isKindOfClass:[MyAnnotation  class ]] == NO){

         return  view;

    }

     if ([mapView isEqual:self.myMapView] == NO){

         return  view;

    }

 

    MyAnnotation *senderAnnotation = (MyAnnotation*)annotation;

    NSString *pinReusableIdentifier = [MyAnnotation reusableIdentifierForPinColor:senderAnnotation.pinColor];

    MKPinAnnotationView *annotationView = (MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:pinReusableIdentifier];

     if (annotationView == nil){

        annotationView = [[MKPinAnnotationView alloc]initWithAnnotation:senderAnnotation reuseIdentifier:pinReusableIdentifier];

        [annotationView setCanShowCallout:YES];

    }

    annotationView.pinColor = senderAnnotation.pinColor;

 

 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *documentPath = [paths objectAtIndex:0];

 

 

    NSString *cachePath = [documentPath stringByAppendingString:@" /images "];

    NSString *cacheFile = [cachePath stringByAppendingString:@" icon.image "];

 

     if ([[NSFileManager defaultManager]fileExistsAtPath:cacheFile]){

        UIImage *image = [UIImage imageWithContentsOfFile:cacheFile];

         if (image != nil){

            annotationView.image = image;

            NSLog(@" 通过本地设置图片 ");

        } else {

            [self setAnnotionImageByUrl:annotationView cacheFile:cacheFile];

        }

    } else {

        [self setAnnotionImageByUrl:annotationView cacheFile:cacheFile];

    }

    view = annotationView;

 

     return  view;

}

 

-( void ) setAnnotionImageByUrl:(MKPinAnnotationView *)annotationView cacheFile:(NSString *) cacheFile{

    NSLog(@" 通过网络设置文件 ");

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_async(queue, ^{

 

 

 

        NSURL *url = [NSURL URLWithString:@" http://www.baidu.com/img/duanwulogo_94a0060bda0885d1c2320ca0d7d7c342.gif "];

        NSData *data = [NSData dataWithContentsOfURL:url];

 

         if (data != nil){

 

            [data writeToFile:cacheFile atomically:YES];

 

            UIImage *image = [UIImage imageWithData:data];

            dispatch_queue_t mainQueue = dispatch_get_main_queue();

            dispatch_async(mainQueue, ^{

                 if (image != nil){

                    annotationView.image = image;

                }

            });

        }

    });

 

}

 

/**

 

// mapView:didAddAnnotationViews: is called after the annotation views have been added and positioned in the map.

// The delegate can implement this method to animate the adding of the annotations views.

// Use the current positions of the annotation views as the destinations of the animation.

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views;

 

// mapView:annotationView:calloutAccessoryControlTapped: is called when the user taps on left & right callout accessory UIControls.

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control;

 

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view NS_AVAILABLE(NA, 4_0);

- (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view NS_AVAILABLE(NA, 4_0);

 

- (void)mapViewWillStartLocatingUser:(MKMapView *)mapView NS_AVAILABLE(NA, 4_0);

- (void)mapViewDidStopLocatingUser:(MKMapView *)mapView NS_AVAILABLE(NA, 4_0);

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation NS_AVAILABLE(NA, 4_0);

- (void)mapView:(MKMapView *)mapView didFailToLocateUserWithError:(NSError *)error NS_AVAILABLE(NA, 4_0);

 

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view didChangeDragState:(MKAnnotationViewDragState)newState

fromOldState:(MKAnnotationViewDragState)oldState NS_AVAILABLE(NA, 4_0);

 

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay NS_AVAILABLE(NA, 4_0);

 

// Called after the provided overlay views have been added and positioned in the map.

- (void)mapView:(MKMapView *)mapView didAddOverlayViews:(NSArray *)overlayViews NS_AVAILABLE(NA, 4_0);

 

- (void)mapView:(MKMapView *)mapView didChangeUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated NS_AVAILABLE(NA, 5_0);

*/

 

 

 

 

/*******************************************************************************************/

/*******************************************************************************************/

/*************************** 位置相关 *************************/

/*******************************************************************************************/

/*******************************************************************************************/

/*******************************************************************************************/

 

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

{

    NSLog(@" Latitude=%f ",newLocation.coordinate.latitude);

    NSLog(@" Longitude=%f ",newLocation.coordinate.longitude);

}

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

{

 

    NSLog(@" 获得位置失败 ");

}

 

@end

MKMapView+ZoomLevel.h

# import  <MapKit/MapKit.h>

 

@ interface  MKMapView (ZoomLevel)

- ( void )setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate

                  zoomLevel:(NSUInteger)zoomLevel

                   animated:(BOOL)animated;

@end

MKMapView+ZoomLevel.m

# import  " MKMapView+ZoomLevel.h "

 

@implementation MKMapView (ZoomLevel)

#define MERCATOR_OFFSET 268435456

#define MERCATOR_RADIUS 85445659.44705395

 

#pragma mark -

#pragma mark Map conversion methods

 

- ( double )longitudeToPixelSpaceX:( double )longitude

{

     return  round(MERCATOR_OFFSET + MERCATOR_RADIUS * longitude * M_PI / 180.0);

}

 

- ( double )latitudeToPixelSpaceY:( double )latitude

{

     return  round(MERCATOR_OFFSET - MERCATOR_RADIUS * logf((1 + sinf(latitude * M_PI / 180.0)) / (1 - sinf(latitude * M_PI / 180.0))) / 2.0);

}

 

- ( double )pixelSpaceXToLongitude:( double )pixelX

{

     return  ((round(pixelX) - MERCATOR_OFFSET) / MERCATOR_RADIUS) * 180.0 / M_PI;

}

 

- ( double )pixelSpaceYToLatitude:( double )pixelY

{

     return  (M_PI / 2.0 - 2.0 * atan(exp((round(pixelY) - MERCATOR_OFFSET) / MERCATOR_RADIUS))) * 180.0 / M_PI;

}

 

#pragma mark -

#pragma mark Helper methods

 

- (MKCoordinateSpan)coordinateSpanWithMapView:(MKMapView *)mapView

                             centerCoordinate:(CLLocationCoordinate2D)centerCoordinate

                                 andZoomLevel:(NSUInteger)zoomLevel

{

     // convert center coordiate to pixel space

     double  centerPixelX = [self longitudeToPixelSpaceX:centerCoordinate.longitude];

     double  centerPixelY = [self latitudeToPixelSpaceY:centerCoordinate.latitude];

 

     // determine the scale value from the zoom level

    NSInteger zoomExponent = 20 - zoomLevel;

     double  zoomScale = pow(2, zoomExponent);

 

     // scale the map's size in pixel space

    CGSize mapSizeInPixels = mapView.bounds.size;

     double  scaledMapWidth = mapSizeInPixels.width * zoomScale;

     double  scaledMapHeight = mapSizeInPixels.height * zoomScale;

 

     // figure out the position of the top-left pixel

     double  topLeftPixelX = centerPixelX - (scaledMapWidth / 2);

     double  topLeftPixelY = centerPixelY - (scaledMapHeight / 2);

 

     // find delta between left and right longitudes

    CLLocationDegrees minLng = [self pixelSpaceXToLongitude:topLeftPixelX];

    CLLocationDegrees maxLng = [self pixelSpaceXToLongitude:topLeftPixelX + scaledMapWidth];

    CLLocationDegrees longitudeDelta = maxLng - minLng;

 

     // find delta between top and bottom latitudes

    CLLocationDegrees minLat = [self pixelSpaceYToLatitude:topLeftPixelY];

    CLLocationDegrees maxLat = [self pixelSpaceYToLatitude:topLeftPixelY + scaledMapHeight];

    CLLocationDegrees latitudeDelta = -1 * (maxLat - minLat);

 

     // create and return the lat/lng span

    MKCoordinateSpan span = MKCoordinateSpanMake(latitudeDelta, longitudeDelta);

     return  span;

}

 

#pragma mark -

#pragma mark Public methods

 

- ( void )setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate

                  zoomLevel:(NSUInteger)zoomLevel

                   animated:(BOOL)animated

{

     // clamp large numbers to 28

    zoomLevel = MIN(zoomLevel, 28);

 

     // use the zoom level to compute the region

    MKCoordinateSpan span = [self coordinateSpanWithMapView:self centerCoordinate:centerCoordinate andZoomLevel:zoomLevel];

    MKCoordinateRegion region = MKCoordinateRegionMake(centerCoordinate, span);

 

     // set the region like normal

    [self setRegion:region animated:animated];

}

 

 

@end

MyAnnotation.h

# import  <Foundation/Foundation.h>

# import  <CoreLocation/CoreLocation.h>

# import  <MapKit/MapKit.h>

 

#define REUSABLE_PIN_RED @" Red "

#define REUSABLE_PIN_GREEN @" Green "

#define REUSABLE_PIN_PURPLE @" Purple "

 

@ interface  MyAnnotation : NSObject <MKAnnotation>

 

@property (nonatomic,readonly) CLLocationCoordinate2D coordinate;

@property (nonatomic, readonly, copy) NSString *title;

@property (nonatomic, readonly, copy) NSString *subtitle;

 

@property (nonatomic,unsafe_unretained) MKPinAnnotationColor pinColor;

 

-(id) initWithCoordinate:(CLLocationCoordinate2D) coordinate

                   title:(NSString*) paramTitle

                subTitle:(NSString*) paramSubTitle;

// 得到颜色

+(NSString *) reusableIdentifierForPinColor:(MKPinAnnotationColor) paramColor;

 

@end

MyAnnotation.m

# import  " MyAnnotation.h "

 

@implementation MyAnnotation

 

@synthesize coordinate,title,subtitle,pinColor;

 

-(id) initWithCoordinate

:(CLLocationCoordinate2D) paramCoordinate title:(NSString *)paramTitle subTitle:(NSString *)paramSubTitle

{

    self = [ super  init];

     if (self != nil){

        coordinate = paramCoordinate;

        title = paramTitle;

        subtitle = paramSubTitle;

        pinColor = MKPinAnnotationColorGreen;

    }

 

     return  self;

}

 

+(NSString *)reusableIdentifierForPinColor:(MKPinAnnotationColor)paramColor

{

    NSString *result = nil;

     switch  (paramColor) {

         case  MKPinAnnotationColorRed:

            result = REUSABLE_PIN_RED;

             break ;

         case  MKPinAnnotationColorGreen:

            result = REUSABLE_PIN_GREEN;

             break ;

         case  MKPinAnnotationColorPurple:

            result = REUSABLE_PIN_PURPLE;

    }

     return  result;

}

 

@end

注意,在使用用户的位置的时候,系统会弹出是否允许应用使用位置的对话框,这个对话框中的提示文字,可以自己进行定义

在系统版本是6.0(包括6.0)以上的时候,在Info.plist文件中进行定义

<key> NSLocationUsageDescription </key>

<string> 是否可以使用位置?如果需要使用本应用,是必须的! </string>

在6.0以下,这样进行定义

// // 提示用户是否允许当前应用使用地理位置,已过时,在Info.plist中使用NSLocationUsageDescription键值替换 // self.myLocationManager.purpose = @"提示用户是否允许当前应用使用位置,已过时";

 

 

分类:  IOS

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于ios 7第一个应用程序HelloWorld的详细内容...

  阅读:81次