0

この行が原因で CoreLocation がコンパイルされない

LocationAnnotation *annotation = [[LocationAnnotation alloc] initWithTitle:@"Point to home?" andCoordinate:newLocation.coordinate andSubtitle:nil];

あらゆることを試しましたが、今は coreLoction の再リンクに飽き飽きしています

その行をコメントアウトすると、CoreLocation は正常にコンパイルされます。

ビルド フェーズにコアロケーションとマップキットを含めましたが、フレームワークの検索パスはありません

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_LocationAnnotation", referenced from:
      objc-class-ref in JobMapVC.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

このコードを別のプロジェクトで使用しましたが、正常にコンパイルされました。何が欠けていますか?

メインコントローラー

JobMapVC.h

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

#import "LocationAnnotation.h"

@interface JobMapVC : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate>
{
    NSString *address;

@private
    CLLocationManager *locationManager;
}

@property (nonatomic, strong) NSString *address;
@property (nonatomic, retain) CLLocationManager *locationManager;
@property (nonatomic, assign, readwrite) double homeLatitude;
@property (nonatomic, assign, readwrite) double homeLongitude;

@property (weak, nonatomic) IBOutlet MKMapView *mapView;

- (IBAction)dismissMap:(id)sender;

@end

JobMapVC.m

#import "JobMapVC.h"
#import "LocationAnnotation.h"

@interface JobMapVC ()

@end

@implementation JobMapVC
{
}

@synthesize address = _address;
@synthesize locationManager = _locationManager;

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self searchCoordinatesForAddress:_address];
}


- (void) searchCoordinatesForAddress:(NSString *)inAddress{

    NSString *cleanAddress = [[inAddress componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]] componentsJoinedByString:@" "];

    NSMutableString *urlString = [NSMutableString stringWithFormat:@"http://maps.googleapis.com/maps/api/geocode/json?sensor=true&address=%@",cleanAddress];

    [urlString setString:[urlString stringByReplacingOccurrencesOfString:@" " withString:@"+"]];

    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
    NSError* error;
    NSURLResponse *response;
    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

    NSDictionary* georesults = [NSJSONSerialization
                                JSONObjectWithData:returnData
                                options:NSJSONReadingMutableContainers | NSJSONReadingAllowFragments
                                error:&error];


    if ( [[georesults objectForKey:@"status"] isEqualToString:@"OK"] )
    {

        double latitude  = [[[[[[georesults objectForKey:@"results"]objectAtIndex:0] objectForKey:@"geometry"]objectForKey:@"location"]objectForKey:@"lat"] doubleValue];
        double longitude = [[[[[[georesults objectForKey:@"results"]objectAtIndex:0] objectForKey:@"geometry"]objectForKey:@"location"]objectForKey:@"lng"] doubleValue];
        NSLog(@"lat:%f", latitude );

        [self zoomMapAndCenterAtLatitude:latitude andLongitude:longitude];

    }
}

- (void) zoomMapAndCenterAtLatitude:(double)latitude andLongitude:(double)longitude
{
    MKCoordinateRegion region;
    region.center.latitude  = latitude;
    region.center.longitude = longitude;

    //Set Zoom level using Span
    MKCoordinateSpan span;
    span.latitudeDelta  = .005;
    span.longitudeDelta = .005;
    region.span = span;

    //Move the map and zoom
    [_mapView setRegion:region animated:YES];

    // Map pin

    CLLocation *newLocation = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];

    // THIS LINE STOP coreLocation from compiling !!!
    LocationAnnotation *annotation = [[LocationAnnotation alloc] initWithTitle:@"Point to home?" andCoordinate:newLocation.coordinate andSubtitle:nil];

    [self.mapView addAnnotation:annotation];
    [self.mapView selectAnnotation:annotation animated:YES];

}

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
    NSLog(@"locationManager:%@ didFailWithError:%@", manager, error);

    if (error.code == kCLErrorDenied)
    {
        UIAlertView *alert = [[UIAlertView alloc]
                              initWithTitle:@"Error!"
                              message:@"This can not work without location services enabled"
                              delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
    }
}


- (IBAction)dismissMap:(id)sender
{
    [self dismissModalViewControllerAnimated:YES];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

@end

問題なく別のプロジェクトでそのまま使用した LocationAnnotation ファイル

LocationAnnotation.h

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

@interface LocationAnnotation : NSObject <MKAnnotation> {
}
@property (strong) NSString *title;
@property (strong) NSString *subtitle;

- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d andSubtitle:(NSString *)sbttl;

@end

LocationAnnotation.m

#import "LocationAnnotation.h"

@implementation LocationAnnotation

@synthesize title, subtitle, coordinate;

- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d andSubtitle:(NSString *)sbttl {
    if ((self = [super init])) {
        title = ttl;
        subtitle = sbttl;
        coordinate = c2d;
    }
    return self;
}

@end

奇妙なことに、 - (id)initWithTitle 行は構文を適切に色付けしません。このコードは、あるプロジェクトでは機能しますが、別のプロジェクトでは機能しません...??!!

4

1 に答える 1