0

andというクラスがFlightRecorderありBookmarkTableViewControllerます。今、私はを提示していBookmarkTableViewControllerます。そして今、そのView Controllerを却下しています。コードは次のようになります。

    [self dismissViewControllerAnimated:YES completion:^{

    FlightRecorder *fl = [[FlightRecorder alloc] init];
    [fl endBookmarkProcessWithBookmarkCollection: dict];

    }

これは、テーブル ビュー セルの選択後に呼び出されます。したがって、次のようなを渡すFlightRecorderと呼ばれるメソッドがあります。endBookmarkProcessWithBookmarkCollection:NSDictionary

- (void)endBookmarkProcessWithBookmarkCollection: (NSDictionary *)dict {

NSString *compiledText = @"Random Airline";

NSString *string = [NSString stringWithFormat: @"\nMiles: %.2f\nFlight: %@\nDate: %@", [[dict objectForKey: @"miles"] floatValue], compiledText, [[NSUserDefaults standardUserDefaults] objectForKey:@"tempD"]];

self.bkBookmarkAlertView = [[UIAlertView alloc] initWithTitle:@"Confirmation" message:string delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Add", nil];

[bkBookmarkAlertView show];

}

ご覧のとおり、辞書とその他の変数を使用して、アラート ビューのメッセージをつなぎ合わせています。アラート ビューには、[キャンセル] と [追加] の 2 つのボタンがあります。しかし問題は、どちらかを押すと両方ともクラッシュし、clickedButtonAtIndex:デリゲート メソッドが呼び出されないことです。まったく同じView Controllerの他のアラートビューでこの経験はありません。

同様の方法で他のいくつかの質問を見ましたが、それらはARCを使用していた解決策です。self要するに、アラート ビューのデリゲートである は、nil または overreleased またはそのようなものであると彼らは言いました。だから私は、そのメソッドは見かけの完了時に呼び出されたとしても、ビューがロードされる前に呼び出されているのかもしれないと思ったBookmarksTableViewController.

そこで、とNSLogの両方に 'sを入れることにしましたが、 が最初に呼び出されるので、どこに問題があるのか​​わかりません。viewDidLoadendBookmarkProcessWithBookmarkCollection:viewDidLoad

助けてくれてありがとう!

4

1 に答える 1

1

そのブロックは実行を終了し、f1 は範囲外になり、ボタンをタップするかなり前に割り当てが解除されました。私はあなたのアプリのアーキテクチャに精通していませんが、タップを待っている間にそのオブジェクトの所有者を見つける必要があります。

于 2012-09-28T10:23:38.043 に答える