0

そのため、Task エンティティ クラス (Core Data) があり、その文字列の 1 つ (timeIntervalString) のセッターを上書きしようとしているので、テーブル ビュー セルの詳細テキスト ラベルに表示できます。何らかの理由で、次のような EXC_BAD_ACCESS エラーが発生します。

ここに画像の説明を入力

[Tasks timeIntervalString] は 37355 のようになるまで続きます...

これが私のコードです:

-(NSString *)timeIntervalString{

    NSUInteger seconds = (NSUInteger)round(self.timeInterval);
if ((seconds/3600) == 0){
    if (((seconds/60) % 60) == 1) {
        self.timeIntervalString = [NSString stringWithFormat:@"%u MIN", ((seconds/60) % 60)];
    } else {
        self.timeIntervalString = [NSString stringWithFormat:@"%u MINS", ((seconds/60) % 60)];
    }
} else if ([self.conversionInfo hour] == 1) {
    if (((seconds/60) % 60) == 0){
        self.timeIntervalString = [NSString stringWithFormat:@"%u HR", (seconds/3600)];
    } else if (((seconds/60) % 60) == 1) {
        self.timeIntervalString = [NSString stringWithFormat:@"%u HR %u MIN", (seconds/3600), ((seconds/60) % 60)];
    } else {
        self.timeIntervalString = [NSString stringWithFormat:@"%u HR %u MINS", (seconds/3600), ((seconds/60) % 60)];
    }
} else {
    if (((seconds/60) % 60) == 0) {
        self.timeIntervalString = [NSString stringWithFormat:@"%u HRS ", (seconds/3600)];
    } else if (((seconds/60) % 60) == 1){
        self.timeIntervalString = [NSString stringWithFormat:@"%u HRS %u MIN", (seconds/3600), ((seconds/60) % 60)];
    } else {
        self.timeIntervalString = [NSString stringWithFormat:@"%u HRS %u MINS", (seconds/3600), ((seconds/60) % 60)];
    }
}
return self.timeIntervalString;

}

何か案は?

4

1 に答える 1

5

return self.timeIntervalString同じtimeIntervalStringメソッドを再帰的に呼び出すだけです。

おそらく欲しいのはreturn _timeIntervalString.

説明:はプロパティ アクセサーのシンタティック シュガーです。ここで定義したメソッドを呼び出す とself.timeIntervalString同じです。この変更により、プロパティ アクセサーを再帰的に呼び出すのではなく、インスタンス変数に直接アクセスするようになります。これは、記述するすべてのカスタム プロパティ アクセサー メソッドで従うべき一般的なパターンです。[self timeIntervalString]-(NSString *)timeIntervalStringreturn _timeIntervalString

編集:コメントの議論に基づいて、これを読み取り専用プロパティとしてマークし、実際に値を設定しない方が良いでしょう:

.h ファイル内:

@property (readonly) NSString *timeIntervalString;

.m ファイルで:

-(NSString *)timeIntervalString {
    NSString *value;
    // insert here the body of your timeIntervalString method, as you
    // originally wrote it, but replace all occurences of:
    // self.timeIntervalString = ...
    // with this: value = ...
    return value;
}
于 2013-08-01T19:03:03.683 に答える