2011-08-09 5 views
0

私はシンプルなコードでちょっと立ち往生しています:私は自分のテーブル内のセルの中に時計を入れたいのですが、これは可能でしょうか?私が作成し、.hファイルに日付文字列をセルに入れることはできますか?

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [NSTimer scheduledTimerWithTimeInterval:1.0f 
            target:self 
            selector:@selector(updateTime:) 
            userInfo:nil repeats:YES]; 
} 

- (void)updateTime:(id)sender{ 

    NSDate *StrDate = [NSDate date]; 
    NSDateFormatter *Dateformat = [[NSDateFormatter alloc]init]; 
    [Dateformat setDateFormat:@"DD-MM-YYYY HH:mm:ss"]; 
    NSMutableString *DateStr = [NSMutableString stringWithFormat:@"%@",[Dateformat stringFromDate:StrDate]]; 

    string = DateStr; 
} 

:私はこのコードを持っている

NSMutableString *文字列を、

とcellForRow ...方法では、私が入れ:

cell.textLabel.textを=文字列;

ので、これは動作しません、あなたは私理由を説明できますか?たくさん

+0

そうです。あなたは文字列を可変でないものにしようとしましたか?すなわち 'NSString'ですか?また、 'string'をどこで宣言しますか? –

+0

日付形式が漏れています。 – dasdom

+0

@dasdom:あなたはDateformatのために何を提案しますか? – Paul

答えて

1

あなたは自動解放可変文字列を作成しています。

string = DateStr; 

を使用すると、DateStrのアドレスにstringのアドレスを割り当てます。 DateStrが自動リリースされているため、このアドレスは実行ループが終了した後のどこにも向いていません。あなたは

string = [DateStr retain]; 

または

NSMutableString *DateStr = [[NSMutableString alloc] initWithFormat:@"%@",[Dateformat stringFromDate:StrDate]]; 

で保持DateStrを作成してDateStrを維持する可能性がどちらかが、文字列は、これで前のアドレスに指摘どおり、再び漏れを取得します。あなたは、文字列をコピーしている最後の行で

NSMutableString *DateStr = [NSMutableString stringWithFormat:@"%@",[Dateformat stringFromDate:StrDate]]; 

self.string = DateStr; 

:したがって、あなたは、文字列プロパティ

@property (nonatomic, copy) NSMutableString *string; 

し、次のコードを使用して行う必要があります。

+0

私はプロパティで試したので、私はプロパティを試してみましたが、セルはまだ空です(私はnumberofRowsのような間違いをチェックした、またはivarとプロパティの "タイプ"しかし、すべてが大丈夫です)。 DateStrの "retain"と同じことですが、説明をいただきありがとうございます。また、プロジェクトにリークがある場合、セルにテキストが表示されないことを意味しますか?またはコードを書くのは間違った方法ですが、テキストはセルに表示されますか?最後に、なぜ@propで "保持"の代わりに "コピー"を使用していますか?再度ありがとう – Paul

+0

セクションの数を1に設定しましたか? – dasdom

+0

後でDateStrを変更するかどうかわからないので、retainの代わりにcopyを使用してください。それは単なる安全のためです。モバイルデバイスのメモリが無限大ではないため、リークは悪いです。したがって、リークによってアプリケーションがクラッシュする。 – dasdom

0

おかげで私はあなたがテーブルビューあなたの中にデータをリロードする必要があると思う:[self.tableView reloadData]。あなたは、このようなテキストフィールドに文字列を代入しようとしたことがありstring = DateStr;

+0

あなたはメモリ管理に非常に苦労しています。このテーマについて少しお読みになることをお勧めします。 Alloc/init + retainはそれを2度保持し、おそらくリークを持ちます。 –

+0

これを削除してください: 'string = [[[NSMutableString alloc] init] retain]; string = DateStr;'これは完全に間違っているからです。文字列を初期化しておき、文字列のアドレスを新しいアドレスに割り当てます。したがって、メモリリークが発生しています。 – dasdom

+0

これは私が私の答えで示唆したことです(私は本当にメモリ管理には悪いです)。私はこの質問の将来の読者の混乱を避けるために私の答えを編集しました。 –

0

後にこれを行いますか?

NSMutableString *DateStr = [NSMutableString stringWithFormat:@"%@",[Dateformat stringFromDate:StrDate]]; 

[cell.textField setStringValue: string]; 
+0

ありがとうございますが、それは動作していません、それは言う:構造体または共用体ではないもののメンバ 'textField'の要求... – Paul

+0

もう1つのことを試してみてください... [cell.view.textField setStringValue:string]; –

+0

これは、cellがNSTableCellViewのインスタンスまたはサブクラスであると仮定しています。 –

関連する問題