Reputation: 213
So I've done some research into this issue, but I haven't found anything similar just yet...
So I'm coding a game in Obj-C using Xcode and Sparrow Framework. I've been working on the simulator up until this point, and it's all been going fine. But when I switch to running it on my device, I get all sorts of errors for things that should be standard, e.g. "Cannot find interface declaration for NSObject", "Unknown type name 'NSMutableArray'" etc. I've already got #import in each class, so you would think that it shouldn't happen, right? I get the feeling that it's just a line or two that needs changing somewhere - but I haven't got a clue what or where.
If anyone has any advice, it would be very much appreciated. :)
EDIT: Here's a screenshot of one of the .h files that give errors - it seems to only be in some of the .h files that I've created. https://i.sstatic.net/H04mE.png
Upvotes: 21
Views: 54505
Reputation: 351
I faced a similar error, resolved it when I noticed I had done something remarkably stupid.
In my foo.m
file, I had forgotten to #import "foo.h"
The error got fixed when I added the import line.
Upvotes: 2
Reputation: 1243
Also make sure you're not including an Objective-C file from a .cpp
or .c
file.
Example: a PhotoManager.mm
might include the header file from the Objective-C pair PhotoObject.h
/PhotoObject.mm
.
Then, if MyAwesomeCppFile.cpp
includes PhotoManager.h
, suddenly PhotoObject.h
doesn't know the basic Objective-C classes and keywords.
A solution would be to use #ifdef __OBJC__
if you can get away with it.
Otherwise designate the .cpp
file type as Objective-C++ Source
in the file's properties panel (Top right window control => "Identity and type")
Upvotes: 0
Reputation: 109
Try this instead for Cocoa or iOS app, make sure to import "Foundation/Foundation.h" in your class where you are inheriting NSObject class.
Upvotes: 10
Reputation: 3233
This can be caused by not including UIKit.
Add this to your header:
#include <UIKit/UIKit.h>
Also make sure to add the UIKit Framework to your project. (Targets/Build Phases/Link Binary With Libraries/ -- Select Add --- Add UIKit.Framework)
Upvotes: 71
Reputation: 253
Make sure that you don't use a Class Name that is already taken. I've had the same problem when i named one of my Classes "Signal", which is already part of Foundation.
Upvotes: 0
Reputation: 40995
It sounds like you may have a circular reference in one of your header files.
This can happen when foo.h #imports "bar.h" and bar.h #imports "foo.h" (or sometimes its a chain of three or more header files importing each other in a circle) and it leads to spurious errors like the one you're seeing.
The solution is to try to avoid importing headers in your .h files, and instead use @class references for external classes in the .h files and put the #imports in the .m files instead. So instead of writing:
#import "SomeClass.h"
In your .h files, whenever possible put:
@class SomeClass;
In your .h file, and put the #import statement in your .m file instead.
Upvotes: 49
Reputation: 16448
Try deleting the derived data for the project. You can do that through the organiser, under projects. You might have a corrupt precompiled header.
Upvotes: 4