Unknown type name ClassName
クラスが正しく定義されているにも関わらずこのエラーが出る場合は、
importで互いのクラスのヘッダファイルを参照しあっていることが原因かもしれません。
すなわち、2つのクラスClass1, Class2のヘッダファイルの冒頭が
Class1.h
#import "Class2.h"
Class2.h
#import "Class1.h"
のようになっている場合です。
これは循環参照(Class2.hを参照→Class1.hを参照→Class2.hを参照→…[以下無限])となるため、認められません。
回避するためには @class コンパイラディレクティブを使用します。上の例の場合は、
Class1.h
@class Class2;
Class1.m
#import "Class1.h"
#import "Class2.h"
Class2.h
@class Class1;
Class2.m
#import "Class1.h"
#import "Class2.h"
とします。
ここでは、@class コンパイラディレクティブによりClass1に対してClass2がクラスであることを知らせた上で、Class2のヘッダファイルはClass1の実装ファイルに対して直接インポートすることによって循環参照を回避しています。(Class2とClass1を逆にして考えた場合ももちろん同様です。)
Class1.hまたはClass2.hの片方でのみ @class コンパイラディレクティブを使用しても循環参照は回避できるため、同様の効果が得られます。
参照
http://iphone-dev.doorblog.jp/archives/5550337.html
まんまパクリです。