iOS - 链接器错误,重复的符号 [英] iOS - Linker Error, Duplicate Symbol

查看:161
本文介绍了iOS - 链接器错误,重复的符号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

似乎我在尝试编译时发生错误,并且似乎直接指向两个文件.MenuViewController和FirstTopViewController。我认为这与我的导入有关,因为它们都是导入另一个,但是错误引用了我的构建对象,它几乎不被使用。另外,使用cl声错误,如何使用-v查看调用?

It seems I am having an error when attempting to compile and it seems to be pointing to two files directly..MenuViewController and FirstTopViewController. I think it has something to do with my imports, as each of them is importing the other, however the error is referencing my Building object, which is barely used in it. Also, with the clang error, how do I use -v to see the invocation?

错误:

ld: duplicate symbol _OBJC_CLASS_$_Building in /Users/alexmuller/Library/Developer/Xcode/DerivedData/ECSlidingViewController-gjxwxiwumgohyehiawnlamggzmop/Build/Intermediates/ECSlidingViewController.build/Debug-iphonesimulator/ECSlidingViewController.build/Objects-normal/i386/FirstTopViewController.o and /Users/alexmuller/Library/Developer/Xcode/DerivedData/ECSlidingViewController-gjxwxiwumgohyehiawnlamggzmop/Build/Intermediates/ECSlidingViewController.build/Debug-iphonesimulator/ECSlidingViewController.build/Objects-normal/i386/MenuViewController.o for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

FirstTopViewController.h

FirstTopViewController.h

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
#import "ECSlidingViewController.h"
#import "MenuViewController.h"
#import "TimesViewController.h"
#import "BuildingViewController.h"
#import "BuildingAnnotation.h"
#import <MapKit/MapKit.h>

@class BuildingViewController;

@interface FirstTopViewController : UIViewController <MKMapViewDelegate> {
    IBOutlet MKMapView *_map;
    BuildingViewController *buildingVC;
    BuildingAnnotation *buildAnnotation;
}

@property (nonatomic, strong) MKMapView *map;

- (IBAction)revealMenu:(id)sender;
- (IBAction)revealTimes:(id)sender;
- (void)loadBuilding:(Building *)building;

@end

FirstTopViewController.m

FirstTopViewController.m

#import "FirstTopViewController.h"

@implementation FirstTopViewController

@synthesize map = _map;

- (void)viewDidLoad {

    buildingVC = (BuildingViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"BuildingList"];
    [super viewDidLoad];
}

- (void)viewWillAppear:(BOOL)animated
{
    [(UIView *)[self.view viewWithTag:10] setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"RedWithNoise"]]];
    [super viewWillAppear:animated];
    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"toolbar"] forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearance] setTitleTextAttributes:
     [NSDictionary dictionaryWithObjectsAndKeys:
      [UIColor colorWithRed:204.0/255.0 green:204.0/255.0 blue:102.0/255.0 alpha:1.0], 
      UITextAttributeTextColor, 
      [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8], 
      UITextAttributeTextShadowColor, 
      [NSValue valueWithUIOffset:UIOffsetMake(0, -1)], 
      UITextAttributeTextShadowOffset, 
      [UIFont fontWithName:@"AGaramondPro-Regular" size:23.0], 
      UITextAttributeFont, 
      nil]];
    self.view.layer.shadowOffset = CGSizeZero;
    self.view.layer.shadowOpacity = 0.75f;
    self.view.layer.shadowRadius = 10.0f;
    self.view.layer.shadowColor = [UIColor blackColor].CGColor;
    self.view.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.view.layer.bounds].CGPath;
    self.view.clipsToBounds = NO;

    MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(CLLocationCoordinate2DMake(30.451667, -84.268533), 16090.344, 16090.344);
    viewRegion = [_map regionThatFits:viewRegion];
    [_map setRegion:viewRegion animated:YES];

    if (![self.slidingViewController.underLeftViewController isKindOfClass:[MenuViewController class]]) {
        self.slidingViewController.underLeftViewController  = [self.storyboard instantiateViewControllerWithIdentifier:@"Menu"];
    }

    if (![self.slidingViewController.underRightViewController isKindOfClass:[TimesViewController class]]) {
        self.slidingViewController.underRightViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Times"];
    }

    [self.view addGestureRecognizer:self.slidingViewController.panGesture];


}

- (void)loadBuilding:(Building *)building {
    if (buildingVC.buildingSelected) {
        if (buildAnnotation != nil) {
            [_map removeAnnotation:buildAnnotation];
        }
        NSLog(@"%@", building.getName);
        buildAnnotation = [[BuildingAnnotation alloc] initWithCoordinate:building.getLocation.coordinate withName:building.getName withAddress:building.getAddress];
        [_map setCenterCoordinate:buildAnnotation.coordinate animated:YES];
        [_map addAnnotation:buildAnnotation];
    }
}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
  self.view.layer.shadowPath = nil;
  self.view.layer.shouldRasterize = YES;
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
  self.view.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.view.layer.bounds].CGPath;
  self.view.layer.shouldRasterize = NO;
}

- (IBAction)revealMenu:(id)sender
{
  [self.slidingViewController anchorTopViewTo:ECRight];
}

- (IBAction)revealTimes:(id)sender {
    [self.slidingViewController anchorTopViewTo:ECLeft];
}

@end

MenuViewController.h

MenuViewController.h

#import <UIKit/UIKit.h>
#import "ECSlidingViewController.h"
#import "FirstTopViewController.h"
#import "TimesViewController.h"

@interface MenuViewController : UIViewController <UITableViewDataSource, UITabBarControllerDelegate> {
    NSIndexPath *selectedIndex;
}

@end

MenuViewController.m

MenuViewController.m

#import "MenuViewController.h"

typedef enum {
    ENGINEERING,
    GARNET,
    GOLD,
    HERITAGE,
    NIGHT,
    OSCEOLA,
    RENEGADE,
    TOMAHAWK
} RouteName;


@interface MenuViewController()
@property (nonatomic, strong) NSArray *menuItems;
@property (nonatomic, strong) NSArray *optionItems;
@property (nonatomic, strong) NSArray *arrayItems;

- (UIImage *)determineActiveRoute:(RouteName)route;
@end

@implementation MenuViewController
@synthesize menuItems, optionItems, arrayItems;

- (void)awakeFromNib
{

    self.menuItems = [NSArray arrayWithObjects:@"Engineering", @"Garnet", @"Gold", @"Heritage Grove", @"Night Nole", @"Osceola", @"Renegade", @"Tomahawk", nil];
    self.optionItems = [NSArray arrayWithObjects:@"Buildings", @"Directions", nil];
    self.arrayItems = [NSArray arrayWithObjects:self.menuItems, self.optionItems, nil];
}

- (void)viewDidLoad
{
  [super viewDidLoad];
  [self.slidingViewController setAnchorRightRevealAmount:200.0f];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)sectionIndex
{
  return [[self.arrayItems objectAtIndex:sectionIndex] count];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return [self.arrayItems count];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 35;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    UIView *sectionView = [[UIView alloc] init];
    [sectionView sizeToFit];
    sectionView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"navCellDivider"]];
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, 100, 20)];
    label.textColor = [UIColor grayColor];
    label.backgroundColor = [UIColor clearColor];
    label.font = [UIFont fontWithName:@"AGaramondPro-Regular" size:12.0];
    if(section == 0)
        label.text = @"BUS ROUTES";
    else
        label.text = @"OTHER OPTIONS";
    [sectionView addSubview:label];
    return sectionView;
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 20;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UILabel *label;
    UIImageView *imageView;
    NSString *cellIdentifier = @"MenuItemCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];

    }
    UIView *selectedView = [[UIView alloc] initWithFrame:cell.frame];
    selectedView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"navCellBackgroundSelected"]];
    cell.selectedBackgroundView = selectedView;
    cell.contentView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"navCellBackground"]];
    label = (UILabel *)[cell.contentView viewWithTag:100];
    label.font = [UIFont fontWithName:@"AGaramondPro-Regular" size:15.0];
    label.text = [[self.arrayItems objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
    imageView = (UIImageView *)[cell.contentView viewWithTag:101];
    if (indexPath.section == 0) {
        [imageView setImage:[self determineActiveRoute:indexPath.row]];
    } else {
        if (indexPath.row == 0) {
            [imageView setImage:[UIImage imageNamed:@"building"]];
        } else {
            [imageView setImage:[UIImage imageNamed:@"60-signpost"]];
        }
    }

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    /* Type cast view as a First Top to make it easier to read. Do switch to select correct route,
        then modify map afterwards to load up correct route.
     TimesViewController can be set to the corresponding times when selected
     */
    FirstTopViewController *mapViewController = (FirstTopViewController *)self.slidingViewController.topViewController;
    TimesViewController *timesViewController = (TimesViewController *)self.slidingViewController.underRightViewController;

    if (indexPath.section == 0) {
        selectedIndex = indexPath;
        switch (indexPath.row) {
            case ENGINEERING:
                NSLog(@"Engineering Selected\n");
                timesViewController.times.text = @"Engineering";
                break;
            case GARNET:
                NSLog(@"Garnet Selected\n");
                timesViewController.times.text = @"Garnet";
                break;
            case GOLD:
                NSLog(@"Gold Selected\n");
                timesViewController.times.text = @"Gold";
                break;
            case HERITAGE:
                NSLog(@"Heritage Grove Selected\n");
                timesViewController.times.text = @"Heritage Grove";
                break;
            case NIGHT:
                NSLog(@"Night Nole Selected\n");
                timesViewController.times.text = @"Night Nole";
                break;
            case OSCEOLA:
                NSLog(@"Osceola Selected\n");
                timesViewController.times.text = @"Osceola";
                break;
            case RENEGADE:
                NSLog(@"Renegade Selected\n");
                timesViewController.times.text = @"Renegade";
                break;
            case TOMAHAWK:
                NSLog(@"Tomahawk Selected\n");
                timesViewController.times.text = @"Tomahawk";
                break;
            default:
                break;
        }
    } else {
        if (indexPath.row == 0) {
            BuildingViewController *buildings = [self.storyboard instantiateViewControllerWithIdentifier:@"BuildingList"];
            buildings.userLoc = [[CLLocation alloc] initWithLatitude:mapViewController.map.userLocation.coordinate.latitude longitude:mapViewController.map.userLocation.coordinate.longitude];

            [self presentModalViewController:buildings animated:YES];
        }
        [tableView deselectRowAtIndexPath:indexPath animated:NO];
        [tableView selectRowAtIndexPath:selectedIndex animated:YES scrollPosition:UITableViewScrollPositionNone];
    }
    [self.slidingViewController anchorTopViewTo:ECRight animations:nil onComplete:^{
        [self.slidingViewController resetTopView];
    }];
}

- (UIImage *)determineActiveRoute:(RouteName)route {
    NSCalendar *gregorianCalender = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *components = [gregorianCalender components:NSHourCalendarUnit fromDate:[NSDate date]];
    switch (route) {
        case ENGINEERING:
            if ([components day] % 7 == 2) {
                if (([components hour] >= 7) && ([components hour] < 17)) {
                    return [UIImage imageNamed:@"green"];
                } else {
                    return [UIImage imageNamed:@"red"];
                }
            } else if (([components day] % 7 == 3) || ([components day] % 7 == 4)) {
                return [UIImage imageNamed:@"red"];
            } else {
                //Weekday
                if (([components hour] >= 7) && ([components hour] < 19)) {
                    return [UIImage imageNamed:@"green"];
                } else {
                    return [UIImage imageNamed:@"red"];
                }
            }
            break;
        case GARNET:
        case GOLD:
        case HERITAGE:
            if ((([components day] % 7 <= 3) || ([components day] % 7 >= 5)) &&
                (([components hour] >= 7) && ([components hour] <= 19))) {
                return [UIImage imageNamed:@"green"];
            } else {
                return [UIImage imageNamed:@"red"];
            }
            break;
        case NIGHT:
            if ((([components day] % 7 == 6) || ([components day] % 7 <= 3)) &&
                (([components hour] >= 22.5) || ([components hour] <= 3))) {
                return [UIImage imageNamed:@"green"];
            } else {
                return [UIImage imageNamed:@"red"];
            }
            break;
        case OSCEOLA:
        case RENEGADE:
        case TOMAHAWK:
            if ((([components day] % 7 <= 3) || ([components day] % 7 >= 5)) &&
                (([components hour] >= 7) && ([components hour] <= 19))) {
                return [UIImage imageNamed:@"green"];
            } else {
                return [UIImage imageNamed:@"red"];
            }
            break;
    }
}

@end


推荐答案

根据您的要求:

从编译源中删除所有类,然后单击+按钮并搜索。 M。突出显示每个类,然后单击添加。构建并再次运行。

Remove all of your classes from compile sources, then click the + button and search for the term '.m'. Highlight every class, then click add. Build and run again.

这篇关于iOS - 链接器错误,重复的符号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆