これは簡単だと思いますが、大きな問題があります。オブジェクトを解放してデリゲート関数を呼び出して解放する方法
私は2 UIViewController
を持っています.1つは "Central"です。他のコントローラは、カメラを使ってバーコードをデコードします。
UIViewController
中央では、私がバーコードを実行するために呼び出す:
barCode = [[MyBarCode alloc] init]
[barCode openBarCodeReader];
//[barCode release]; //can't release it here, this cause problem with camera
} //function finish
MyBarCode
オブジェクトは、プログラムの制御がかかります。まず今、いくつかの時間後に、私はこのコントローラ
[self presentModalViewController:barCodeView animated:YES];
でカメラを起動したよりのUIViewController
- (void) loadView {
UIView *frame = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[frame setBackgroundColor:[UIColor clearColor]];
self.view = frame;
}
に単純なビューを、それを作成します
[barCodeView dismissModalViewControllerAnimated:YES];
デリゲート機能でデータを送信しましたが、今度はUIViewController
が完了してリリースする必要があります。私は何かしようとしました:
別の代理人メッセージを送信してください。私はバーコードオブジェクトがまだ実行されているため、このデリゲート、プログラムのクラッシュで
[barCode release];
を行うと、次の命令に行く必要がある場合でも、私は
[self release]
を送ることができますが、私はどこプログラム、それが動作しているかどうかを知るとしません。その後、 "Central"UIViewController
に入ります。私はプログラムが中央
UIViewController
に行く再び[self dismissModalViewControllerAnimated:NO];
しかし、でこの補助
UIViewController
を却下することができます。
誰でもこの問題を解決する考えがありますか?
**編集**
は、たぶん私は答えを見つけた: 私は方法
[theDelegate BarCodeFinish];
のようにデリゲートを呼び出すしかし、通知でそれを呼び出すことはありません。
[[NSNotificationCenter defaultCenter] postNotificationName:@"BarCodeFinish" object:nil];
拳の場合、私はまだそのコールの後に次のコードを実行されますが、それはそれは内部にある機能を終了した後、第2に、呼び出しが実行され、私は何の問題もなくバーコードオブジェクトを解放することができます。これが最善の方法ですか?
ハム..多分私は少し間違って書く。それはC関数のようです。私がしたいのは単純です: 'result = [barCode openBarCodeReader]'そして '[barcode release]'です。私はカメラを開くので、私はこれを行うことはできません(そして、私はカメラを開く前にこの行に行くので、バーコードを解放することはできません)。カメラが何かをデコードすると、バーコードオブジェクトに機能を送ります。今私はこれをセントラルビュー(または中央オブジェクト、同じです)に戻したいと思います。私はデリゲートを使ってこのデータを送信します。 「中央」はこれを続けることができます。しかし、私はバーコードをリリースする必要があります。バーコードをリリースして次の行に行くとクラッシュする – Rodrigo
解決策が見つかると思います。私は[[NSNotificationCenter defaultCenter] postNotificationName:@ "BarCodeFinish"オブジェクト:nil]; 'を送ることができます。これはオブジェクトの外側で実行され、私はそれを解放することができます。私はこのGOTOスタイルを使用するのが好きではありません...しかし、あなたの時間をありがとう。 – Rodrigo
RodrigoはMyBarCodeではないバーコードのラッパークラスですか?またはそれはカスタムUIViewControllerサブクラスですか? 2番目のView Controllerはカメラを管理するのではなく、中央のコントローラは2番目のビューコントローラを管理し、何かをデコードするのを待ちます。 'MyBarCode'がラッパークラスの場合、*カメラを設定してコードをキャプチャしないでください。もしそうでなければ、あなたの' openBarCodeReader'は何をすると思いますか? ? –