2011-06-18 11 views
0

私はプライベートカテゴリ(@interfaceクラス(プライベート))を持つクラスクラスを持っています。カテゴリには "-run"という名前のメソッドがあります。カテゴリ実装可能な問題

しかし、XCodeが[classInstance run]を表示しているとき。 " - runに応答するかもしれません"。なぜこのことが分かりませんか?メソッドは正常に実行され、実際のクラスと同じ.mファイルで宣言されます。実際のクラス実装のすぐ上にあります。

私が間違っていることは何ですか?

ここに私の.mファイル全体があります。私はそれが現時点でNSArrayを拡張していることを知っていますが、他の.hの依存関係がなくてもその例を示すためにその方法を作りました。限り、コンパイラは、メソッドの宣言を見ているようrun従来の方法の呼び出しに、あなたはそのエラーが表示されません

#import <Foundation/Foundation.h> 
@implementation NSArray (Private) 

-(void)runMethod {} 

@end 

@implementation NSArray 

- (void)letsPlay { 
    [self runMethod]; // says -runMethod might be missing 
} 

@end 
+0

実装ファイルを投稿できますか? (それの少なくとも重要な部分) – drewag

答えて

2

通常、民間のカテゴリが同じように行われています。私たちの多くはまた@properties、アイバーズすることができますファイルの上部にあるクラスの拡張で、民間のものを貼り付けるに移動してきたものの

#import "M.h" 
@interface M(PrivateGunk) 
.... declarations here ... 
@end 

@implementation M 
@end 

@implementation M(PrivateGunk) 
.... impl here ... 
@end 

+0

私はその正確なことをやったことがあり、私的な方法が欠けていると私にはまだ伝えます。 – David

+0

どこが間違っているのか分かりました。実際の実装よりもプライベート@実装があっても、@interfaceが必要ですか?元の投稿で私の編集を参照してください。 – David

+0

ああ - 私はそれがまったく編集されて驚いています。マッスルメモリでは、常にカテゴリ@ @インプリメンテーションとカテゴリ@ @インタフェースを結合しています。いずれにしても、コンパイラは '@ implementation'のメソッドを別の' @ implementation'の文脈での宣言と見なしていないようです。バグ?特徴?私はそれについて熟考しなければならないだろうが、あなたが瞬間があるなら、バグを報告してください。 – bbum