2011-06-23 13 views
0

OpenCVを使用してカメラが顔を検出したときにAlertViewをトリガーしようとしています。私は顔の検出を行うことができ、NSLogを正常に出力することができます。しかし、私は...私は画面が薄く表示されているとして警告表示は一種のトリガされ見ることができますが、私はアラートビューが出てきた見ることができませんでしたカメラがiPhoneで動作しているときにUIAlertViewを使用する

NSLog(@"Face Detected"); 
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Face Detected" message:@"Do you really want to try again?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil] autorelease]; 

[alert addButtonWithTitle:@"Yes"]; 

[alert show]; 
[alert release]; 

でアラートビューをトリガーする

感謝をしようとしたとき助けるために!

答えて

3

[alert release]を削除します。すでにautoreleaseと呼ばれています。

また、あなたは初期化子で[alert addButtonWithTitle:@"Yes"];を統合することができます:

あなたはからこれを呼び出している
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Face Detected" 
               message:@"Do you really want to try again?" 
               delegate:self 
             cancelButtonTitle:@"Cancel" 
             otherButtonTitles:@"OK", nil] autorelease]; 
+0

+1。 – makdad

+0

私はメモリの問題が実際にエラーの原因だと思います。アラートビューはあまりにも早くリリースされ、表示することはできません。 – fabian789

+0

fabian789のコードを試しましたが、alertviewのような淡色の画面が表示されましたが、ポップアップは表示されませんでした... – Lawrence

1

?メインスレッドまたはセカンダリ? UIKitは常にメインスレッド上で実行されているはずです。

コード例:メモリの問題をキャッチするため

- (void)opencvFaceDetect 
{ 
    // stuff before 
    [self performSelectorOnMainThread: @selector(openAlertView) withObject:nil waitUntilDone:false]; 
    // stuff after 
} 

、その後

- (void)openAlertView 
{ 
    UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Face Detected" 
               message:@"Do you really want to try again?" 
               delegate:self 
             cancelButtonTitle:@"Cancel" 
             otherButtonTitles:@"OK", nil] autorelease]; 
} 
+0

opencvFaceDetectという空白でAlertビューを呼び出そうとしています。メインスレッドからアラートビューを呼び出さないようにするにはどうすればいいですか? – Lawrence

+0

問題はバッファフレームが常に画面に表示されるため、警告ビューが表示されませんか? – Lawrence

+0

あなたのopencvFaceDetectメソッドが例えばメインスレッドにないメソッドによって呼び出された場合。確かに、NSObjectのメソッドperformSelectorOnMainThread:withObject:waitUntilDone: – teriiehina

関連する問題