2011-11-14 25 views
0

簡単な質問ですが、これは私にエラーをもたらし、解決できないようです。私のオブジェクト(のUIViewController)でオブジェクト内の呼び出しメソッドはSIGBARTに与えます

は私が.h

​​

でメソッドを宣言し、.m

-(void)setCurrentLoc:(CLLocation *)loc 
{ 
    currentLocation = loc; 
} 

のすべての良いてきました。しかし、これは私が(正常に動作)このオブジェクトを開始する方法ですが、私はそれがSIGBART

.h

IBOutlet VectorViewController *vectorView; 

.m

vectorView = [[VectorViewController alloc] init]; 
... 
//In another method I call: 
[vectorView setCurrentLoc:location]; // Error/SIGBART line 

を与えるsetCurrentLoc:呼び出すとき、私は逃した何かがありますか?グローバル化したり、何かを作ったりしないかもしれませんか?

エラー:

-[UIView setCurrentLoc:]: unrecognized selector sent to instance 0x841cab0

+0

あなたはcurrentLocationを宣言して合成しましたか?多分あなたはself.currentLocation = locを使うべきでしょう。 – alinoz

+0

はい、私はしましたが、それはエラーではありません...それはメソッドを呼び出しています。 – LouwHopley

答えて

1

-[UIView setCurrentLoc:]: unrecognized selector sent to instance 0x841cab0

これはもはやあなたのVectorViewControllerを指しているポインタにメッセージを送信しているが、今UIViewを指していることを意味しています。これは、通常、オブジェクトがオートリリースまたはリリースされ、メモリが再利用されたときに発生します。

vectorViewを作成するときと、他の方法でもう一度呼び出すときの間に何が起こるかを注意深く調べます。あなたはインスタンス変数を直接設定してアクセスしているようですが、おそらくプロパティ(ARCを使用しているかどうかを知らずに特定するのは難しい)を介してアクセスし、それらのプロパティが適切に宣言されていることを確認する必要があります。

+0

これは、vectorViewが初期化される前に発生したlocationUpdateと混合されたために発生したため、locationUpdateの内部に配置します(既に存在するかどうかを確認するif)。ありがとう – LouwHopley

0

あなたが書いたコードに基づいて、あなたは、setCurrentLoc方法を提供する必要がある代わりにプロパティを使用して、代わりに合成しません。あなたのVectorViewControllerクラス、使用中の

:あなたの@implementationで

@property (nonatomic, retain) IBOutlet CLLocation * currentLocation; 

、追加:

@synthesize currentLocation; 

とあなたのdeallocメソッドでは、追加:

self.currentLocation = nil; 

あなたは既存のままsetCurrentLocationをそのまま呼び出します。

+0

私はこれを知っています。しかし、そうではありません。なぜなら、 'vectorView'が存在する前に何とか呼び出すからです。 – LouwHopley

関連する問題