2017-07-12 8 views
0

私は単純なmapViewアプリケーションを作成しました。これは2種類の問題を示しています。MapViewアプリケーション

1スレッド1で実行が停止しています。シグナルSIGABRTエラーです。

2この関数は、コンパイル時エラーを示しています。

- (IBAction)findMe:(id)sender { 

    If([[toggleButton titleForState:UIControlStateNormal] isEqualToString:@"Find Me"]) 
    { 
    [toggleButton setTitle:@"Hide Me" forState:UIControlStateNormal]; 
    mapView.showsUserLocation=YES; 
    } 
    else 
    { 
    [toggleButton setTitle:@"Find Me" forState:UIControlStateNormal]; 
    mapView.showsUserLocation=NO; 
    } 

} 

これらのエラーを削除するにはどうすればよいですか?

私は自分のコードに1つ以上の場所の座標を入れたい地図上にloc.pngアイコンを表示したいのですが、どのようにこの作業を行うことができますか?

あなたは、このリンクからサンプルプロジェクトを参照することができます:あなたは3つの理由のための時間のコンパイルエラーになっているhttps://drive.google.com/open?id=0B5pNDpbvZ8SnRmNFS0pjVnJFWHc

+0

あなたは "もし" に資本Iを使用しています。それは "if"でなければなりません。コンパイル時にエラーが発生する可能性があります。 – LoganHenderson

+0

コンパイル時エラーは削除されます。スレッド1:シグナルSIGABRTエラーが実行時に保持されます。 –

+0

@ user2557829この質問はhttps://stackoverflow.com/questions/45067276/thread-1-signal-sigabrt-error/45069255#45069255 –

答えて

0

を:あなたが使用している「場合」

1)のif-else条件」でなければなりませんif "すなわち小文字。

2)。 IBOutletがビューコントローラに存在しないストーリーボードのfindMeボタンに接続しています。だからそれを削除するか、それを追加してください。

3)MKMapViewを使用していますが、プロジェクトのビルドフェーズの[リンクバイナリ]でMapKitフレームワークを追加していません。

コードをコンパイルして&にエラーを実行させないようにしてください。あなたのクエリに

+0

で解決されています。コンパイル時エラーは削除されます。プログラムの実行は、実行時にスレッド1:シグナルSIGABRTエラーで停止しています。 –

+0

私は自分のコードで1つ以上の場所の座標を入れたい私はこれらの座標に対応するマップ上のloc.pngアイコンを表示したいどのように私はこのタスクを達成することができますか? –

+0

main.stroyboardでは、コントローラークラスに存在しないfindMeボタンにIBOutletが接続されているため、プログラムの実行が停止しています。そのfindMe IBOutletのリンクを削除しない限り、コードは実行時検証をパスされません。 –

0

回答:
私はこのタスクを達成することができますどのようにそれらの座標に対応する地図上loc.pngアイコンを表示したい私のコードにもっとして1箇所の座標を入れたいですか?

ここここ

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

 
@interface ViewController : UIViewController <CLLocationManagerDelegate, MKMapViewDelegate> 
 

 
@end

をViewController.m

#import "ViewController.h" 
 
#import "MyAnnotation.h" 
 
#import <MapKit/MapKit.h> 
 

 
@interface ViewController() 
 

 
@property (strong, nonatomic) IBOutlet MKMapView *myMapView; 
 

 
@end 
 

 
@implementation ViewController 
 

 

 
- (void)viewDidLoad { 
 
    [super viewDidLoad]; 
 

 
    // setup the map view, delegate and current location 
 

 
    [self.myMapView setDelegate:self]; 
 

 
    self.myMapView.mapType = MKMapTypeStandard; 
 

 
    CLLocationCoordinate2D myLocation = CLLocationCoordinate2DMake(25.085130,-77.331428); 
 
    [self.myMapView setCenterCoordinate:myLocation]; 
 

 
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(myLocation, 2000, 2000); 
 
    region.center = self.myMapView.centerCoordinate; 
 
    self.myMapView.showsUserLocation = YES; 
 
    [self.myMapView setRegion:region animated:YES]; 
 

 
    [self dropPins]; 
 
} 
 

 
-(void)dropPins { 
 
    NSMutableArray *annotationArray = [[NSMutableArray alloc] init]; 
 

 
    CLLocationCoordinate2D location1 = CLLocationCoordinate2DMake(25.085130, -77.331428); 
 
    MyAnnotation *annotation1 = [[MyAnnotation alloc] initWithCoordinates:location1 image:@"loc.png"]; 
 
    [annotationArray addObject:annotation1]; 
 
    [self.myMapView addAnnotations:annotationArray]; 
 

 
    [annotationArray removeAllObjects]; 
 
    CLLocationCoordinate2D location2 = CLLocationCoordinate2DMake(25.085130, -77.336428); 
 
    MyAnnotation *annotation2 = [[MyAnnotation alloc] initWithCoordinates:location2 image:@"loc.png"]; 
 
    [annotationArray addObject:annotation2]; 
 
    [self.myMapView addAnnotations:annotationArray]; 
 
} 
 

 
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { 
 
    static NSString *identifier = @"MyLocation"; 
 
    if ([annotation isKindOfClass:[MyAnnotation class]]) 
 
    { 
 
     MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[self.myMapView dequeueReusableAnnotationViewWithIdentifier:identifier]; 
 

 
     if (annotationView == nil) 
 
     { 
 
      annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier]; 
 
     } else 
 
     { 
 
      annotationView.annotation = annotation; 
 
     } 
 

 
     annotationView.enabled = YES; 
 
     annotationView.canShowCallout = NO; 
 

 
     if([[(MyAnnotation *)annotationView.annotation image] isEqualToString:@"pin1.png"]) 
 
      annotationView.image = [UIImage imageNamed:@"loc.png"]; 
 

 
     if([[(MyAnnotation *)annotationView.annotation image] isEqualToString:@"pin2.png"]) 
 
      annotationView.image = [UIImage imageNamed:@"loc.png"]; 
 

 
     return annotationView; 
 
    } 
 
    return nil; 
 
} 
 

 
- (void)didReceiveMemoryWarning { 
 
    [super didReceiveMemoryWarning]; 
 
    // Dispose of any resources that can be recreated. 
 
} 
 

 
@end
するためのコードであるViewController.h
ためのコードでありますMyAnnotation.h

#import <Foundation/Foundation.h> 
 
#import <MapKit/MapKit.h> 
 

 
@interface MyAnnotation : NSObject <MKAnnotation> 
 

 
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate; 
 
@property (nonatomic, copy, readonly) NSString *image; 
 

 

 
-(id)initWithCoordinates:(CLLocationCoordinate2D) paramCoordinates 
 
        image:(NSString *) paramImage; 
 

 
@end

ここMyAnnotationためのコードであるため

追加新しいファイルMyAnnotation.h/MyAnnotation.mここ

されているコード。メートル

#import "MyAnnotation.h" 
 

 
@implementation MyAnnotation 
 

 
-(id)initWithCoordinates:(CLLocationCoordinate2D)paramCoordinates 
 
        image:(NSString *)paramImage 
 
{ 
 
    self = [super init]; 
 
    if(self != nil) 
 
    { 
 
     _coordinate = paramCoordinates; 
 
     _image = paramImage; 
 
    } 
 
    return (self); 
 
} 
 

 
@end