1 つのクラスの 1 つのプロパティに問題があります。違いがある場合は、iOS 6.1 でコーディングしています。
クラスはUIViewController
次のようにヘッダー ファイルで宣言され、プロパティは次のようになります。
// Keeps track of time in seconds
@property (nonatomic, strong) NSNumber *timeInSeconds;
私の実装ファイルでは、次の 3 つの場合にプロパティを使用します。
1つは、メソッドで時間を追加することです
- (void)addTime
1つは、メソッドで時間を減算することです
- (void)subtractTime
これら 2 つのメソッドは、次のようにプロパティを使用します。
- (void)addTime
{
CGFloat timeFloat = [self.timeInSeconds floatValue];
// Here I set the value of the property timeInSeconds, but I can't access that value later on in the code!
self.timeInSeconds = [NSNumber numberWithFloat:timeFloat +5];
NSLog(@"Total Time:%@", self.timeInSeconds);
}
2 つのメソッドaddTime
とは本来の機能を実行し、足し算、引き算、足し算のようにsubtractTime
、プロパティ値を適切に追跡します...timeInSeconds
問題は、同じ実装ファイルで次の 3 番目のメソッドを呼び出すときです。
- (void)updateLabelTime
{
self.label.attributedText = [[NSAttributedString alloc]initWithString:[self.timeInSeconds stringValue]];
[self.label setNeedsDisplay];
[NSTimer scheduledTimerWithTimeInterval:0.8 target:self selector:@selector(updateLabelTime) userInfo:nil repeats:YES];
}
の代わりにNSAttributedString
withを作成しようとしましたが、以前にandを使用して設定したプロパティの値を返す代わりに、 getter を呼び出して の新しいインスタンスを作成するという問題が解決しません。 .stringWithFormat
initWithString
timeInSeconds
addTime
subtractTime
timeInSeconds
プロパティのゲッター/セッターを記述しないようにしましたが (iOS 6.1 を使用しているため)、違いはありません。
ラベルをランダムな文字列に設定するだけでうまくいきます。問題は、 の値timeInSeconds
が 55 であることがわかっている場合でも、新しい が作成されること_timeInSeconds
です。
私はフランス人なので、英語で最善を尽くしました。質問が初心者の iOS 開発者によって既に尋ねられている場合は、答えないでください。リダイレクトしてください。私は答えを見つけることができませんでした、ありがとう!
編集:これがカスタムゲッターです
- (float)timeInSeconds
{
if (!_timeInSeconds) {
_timeInSeconds = 0;
}
return _timeInSeconds;
}
2番目の編集:
私が犯した初歩的な愚かな間違いは、addTime とsubtractTime が実際にプロトコルを実装していて、それらが別のクラスに「存在する」プロパティを設定していたため、アクセスできなかったことです。プロトコルを必要とする他のクラスは、addTime とsubtractTime が記述されているクラスの新しいインスタンスを作成していました。
行う必要があるのは、コントローラーをプロトコルのデリゲートとして設定することです。私は次のような方法でviewDidLoadメソッドでこれを行いました:
self.view.delegate = self;
すべての助けをありがとう。