cms
cms

Reputation: 301

Undefined symbols: "_OBJC_CLASS_$ error

I've been looking through countless posts about this error:

Undefined symbols:
"_OBJC_CLASS_$_BoxView", referenced from:
  objc-class-ref-to-BoxView in ViewMovingViewController.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

BoxView is a subclass of UIView, and the UIKit framework has been included. BoxView.h has been imported in the ViewController.

The ViewController contains this code:

-(void) addBoxViewAtLocation:(CGPoint)point {
    CGRect rect;  
    rect.origin.x = point.x;  
    rect.origin.y = point.y;  
    rect.size.width = 80;  
    rect.size.width = 40;  
    BoxView *newView = [[BoxView alloc] initWithFrame:rect];  
    newView.backgroundColor = [UIColor yellowColor];  
    [mainView addSubview:newView];  
}  

And BoxView contains this code:

- (id)initWithFrame:(CGRect)frame {     
    self = [super initWithFrame:frame];  
    if (self) {  
        // no further initialization  
    }  
    return self; 
}  

This is the line that's causing the error, from the code above:

BoxView *newView = [[BoxView alloc] initWithFrame:rect];

When I change BoxView to UIView in that line, the error goes away. Does anyone know what I need to change here? I have looked through many posts about this, but most answers say it's link related, but I've tried ticking and unticking certain boxes with no success. I'm wondering if the error is in my code? Any suggestions would be appreciated!

Upvotes: 30

Views: 43506

Answers (4)

Park Junho
Park Junho

Reputation: 1

I had a similar problem. In my case, it was a problem caused by LFS.

  1. Open the Terminal application.

  2. Install Git-LFS.

    brew install git-lfs

  3. Enter this command for initialization after LFS install was completed.

    git-lfs install

4-1. (If you use CocoaPods) Move to project folder, and reinstall Pods(remove -> install).

4-2. (If you not use CocoaPods) Remove clone, and download it again.

Upvotes: 0

microVinchi
microVinchi

Reputation: 33

Added Scenario

If your project has module dependencies(framework), rebuild them before building your main project.

Upvotes: 2

Enrico Susatyo
Enrico Susatyo

Reputation: 19790

I just want to add that Ben Mosher's answer is totally right. But there's another way to include the files to build in the Target settings.

enter image description here

Upvotes: 4

Ben Mosher
Ben Mosher

Reputation: 13381

In general, this will occur when the code for BoxView is not being compiled into your target correctly.

identity editor screenshot

You need to ensure that the target you're building has its corresponding box checked for your BoxView.m implementation file. Your question suggests that you've tried this, but here's a screenshot (from Xcode 4) just for clarity's sake.

A 'Clean and Build' never hurts, either.

Upvotes: 54

Related Questions