1

現在、以下のコードを使用して、ユーザーがアプリ内購入を行って、アプリのメイン ビューであり、UILabel に合計クレジットを表示する .xib を表示できるストーリーボード テーブル ビューを閉じています。問題は、購入によって追加したばかりの新しいクレジットの合計が、この時点で UILabel に表示されないことです。アプリを完全に閉じて再度開くと、それらは表示されます。現在のビューを閉じるときに.xibビューまたはそれらの行に沿って何かを更新するコードを私の閉じるアクションに追加する方法はありますか? したがって、ビューが閉じられると、新しい合計クレジット数がラベルに表示されますか?? どんな助けでも素晴らしいでしょう!ところで、私はこれに非常に慣れていないので、あなたの答えでは、私があまり知らないと仮定してください! また、クレジットの値を保存するためにデフォルトを使用しています。

- (IBAction)dismiss:(id)sender {

    [self.presentingViewController dismissModalViewControllerAnimated:YES];
}

これが私がクレジット/コインを管理する方法です。

-(id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {

    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        coins = [[[NSUserDefaults standardUserDefaults] valueForKey:@"coins"] unsignedLongLongValue];
    }
    return self;
}

-(void) viewWillAppear:(BOOL)animated{

    labelCoins.text = [NSString stringWithFormat:@"%lld", coins];
}
4

4 に答える 4

1

UILabel に適切なテキストを追加するロジックがどこかにあります。それはおそらく現在にありviewDidLoadます。そのロジックを次のviewWillAppear:ように入れます。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    //example code to update label
    self.creditsLabel.text = numberOfCredits;
}

UILabel (この例では creditsLabel) がプロパティでない場合、これが機能するにはプロパティである必要があります。


追加したばかりの新しいコードによると、それはあなたの質問を実際には解決しませんでした。あなたがする必要があるのは、coins割り当てを に追加することだけですviewWillAppear。これは、ユーザーの既定値からコインの値を再抽出する必要があるためです (既定値を変更しても、この値は自動的に更新されません)。

-(void) viewWillAppear:(BOOL)animated{
    coins = [[[NSUserDefaults standardUserDefaults] valueForKey:@"coins"] unsignedLongLongValue];
    labelCoins.text = [NSString stringWithFormat:@"%lld", coins];
}
于 2013-03-07T23:38:15.313 に答える
0

UILabel はテーブル ビュー内のセルの一部ですか、それとも現在表示されているビューの別の場所に表示されますか?

後者の場合は、UILabel を IBOutlet に接続すると、次のようなことができます。

- (IBAction)dismiss:(id)sender {
    [myCreditsLabel setText: [NSString stringWithFormat: @"my credits are worth $%4.2f", creditsAsFloat]];
    [self.presentingViewController dismissModalViewControllerAnimated:YES];
}

(「creditsAsFloat」は浮動小数点数だけですが、このコンテキストではView Controllerオブジェクトのメンバーである必要があります)。

于 2013-03-07T23:36:12.397 に答える
0

まず、UILabel がどこにあるか明確に判断できないため、不正確なアドバイスを提供する可能性があります。

  • 却下された見解で
  • 提示ビューで

2 番目のオプションの方が、質問をするのに適していると思います。

次に、これを行うには 2 つのオプションがあります。

  • 醜くて速い
  • 良いと高価

醜くて速い

UILabel への参照を保持するコントローラーにクレジット量を格納するために使用する NSDefaults キーにオブザーバーを追加するだけです。Xcode のドキュメントを参照してください。

Registering for Key-Value Observing

また

addObserver:forKeyPath:options:context:

一度やってしまえばそれほど悪くはありませんが、簡単で速いので、すぐにめちゃくちゃになってしまいます。

良いと高価

デリゲート パターンを使用して、提示するコントローラーに UILabel のコンテンツを更新するように指示します。

2 番目のオプションを使用する必要があります。やり過ぎで退屈に聞こえるかもしれませんが、長期的には報われます。

幸運を。

于 2013-03-07T23:45:37.393 に答える
0

dismissModalViewControllerAnimated古くて時代遅れです。

現代的な方法は、これをあなたのに送ることpresentingViewControllerです:

- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion

これにより、表示中のView Controllerを更新できる完了ブロックを提供できます。

または、提示されたView Controllerのデリゲートが準拠するプロトコルを宣言することもできます-これにより、プロセス全体をきめ細かく制御できます(あなたが何を知っているかわかりません-詳細を知る必要がある場合は、答えを拡張できます. ..)。

于 2013-03-07T23:40:48.227 に答える