0

私は数週間プロジェクトに取り組んでおり、最近、データの保存を支援するシングルトン オブジェクトを実装しました。これが実装された後、メインのビュー コントローラー内でラベルを更新する際に問題が発生しました。

たとえば、次のラベルを更新しようとしています。

@property (nonatomic, retain) IBOutlet UILabel *numDrinksLabel;
@property (nonatomic, retain) IBOutlet UILabel *BACLabel;

ボタンを押すと呼び出される関数内にある次のコードを使用します。

BACLabel.text = [NSString stringWithFormat:@"%.2f", user.BAC];
numDrinksLabel.text = [NSString stringWithFormat:@"(%i)", user.numDrinks];

このコード ブロックで実行時エラーが発生します。

-[__NSCFString setText:]: unrecognized selector sent to instance 0x1197ef40

ただし、内部で呼び出された同じコード ブロックviewDidLoadまたはviewDidAppearは問題なく実行されます。@property最初に、これは私の宣言に問題があることを示唆していましたが、に変更すると同じエラーが発生し、 に変更するretainと、uilabel オブジェクトは単純に null になります。これは予想されることですが、それでも非常にイライラします。strongweak

問題は、なぜviewDidAppear関数の後にラベル オブジェクトの割り当てが解除されるのかということです。

これを修正する方法、または根本的な原因をさらにテストする方法についての提案は大歓迎です!

4

2 に答える 2

0

オブジェクトの text プロパティに何かを割り当てると、iVar を含むオブジェクトがnumDrinksLabel存在BACLabelしなくなったようUILabelです。
これはボタンを押した後に発生するため、以前にメイン イベント ループに入ったことになります。このループでは、何らかのオブジェクトによって保持されていない場合、自動解放オブジェクトは解放されます。
したがって、あなたのUILabelsas iVars を持つオブジェクトは autorelease オブジェクトであると思わself.BACLabel.text =BACLabel.text =ます。sixcent が言ったように、割り当てを のようなセッター
に置き換えてみてください。BACLabel.text =self.BACLabel.text =

于 2013-03-29T20:20:58.513 に答える
0

これらのラベルのスーパービューも宣言されているかどうかを確認してくださいstrong

于 2013-03-29T19:48:09.480 に答える