0

このデリゲート メソッド内の resultsPoints の値を取得したい

- (void)perksDetailsViewController:(PerksDetailsViewController *)sender didPassRequiredPoints:(NSNumber *)requiredPoints withCard:(Card *)selectedCard 
{

    double perksPoints = [requiredPoints doubleValue];

    self.resultingPoints = [NSNumber numberWithDouble:[selectedCard subtractPoints:perksPoints] ];

    NSLog(@"points remaining %@", self.resultingPoints);
}

これは正常に機能しますが、以下のメソッド内でresultingPointsにアクセスしようとすると、resultingPointsにはnull値が含まれます。これは、配置したNSLogでも言われています。

- (void) didPressDone:(id)sender {

    PointsResultsViewController *pointsResults = [self.storyboard instantiateViewControllerWithIdentifier:@"resultsPointsVC"];

    [self.navigationController pushViewController:pointsResults animated:YES];

    pointsResults.leftPointsLabel.text = [self.resultingPoints stringValue];

    NSLog(@"hey points left is%@", self.resultingPoints);
}  

最初のメソッドから resultsPoints の値を取得する良い方法は何でしょうか? 前もって感謝します。

編集:ログ出力

2012-05-02 15:47:48.297 CardWallet[22196:f803] ポイント残り 900

2012-05-02 15:47:49.291 CardWallet[22196:f803] ちょっとポイントが残っています (null)

4

1 に答える 1

1

あなたの最後のコメントから:

これはプロパティ宣言です@property (nonatomic, weak) NSNumber *resultingPoints;

これがおそらく問題の原因です。弱いプロパティは割り当てが解除されnil、他に何も保持されていない場合に設定されます。これがここに当てはまります。それを強力なプロパティにしてください。新しいViewControllerをプッシュしても引き続き使用できます。

チャットで提供した詳細から、実際にはこのクラスの2つの異なるインスタンスを処理しています。画面に表示されているものと、代理人として使用されているもの。

デリゲートを割り当てるときは、それが画面上にあるオブジェクトと同じであることを確認する必要があります。これは、セグエの宛先ビューコントローラーが表示されようとしているビューコントローラーである場合に、prepareForSegueで行うのが最適です。

于 2012-05-02T07:45:32.873 に答える