2

viewController (UITableViewController のサブクラス) の .h ファイルに 2 つの NSMutableString オブジェクトが定義されています。

NSMutableString *firstName;
NSMutableString *lastName;

それらはプロパティです:

@property (nonatomic, retain) NSMutableString *firstName;
@property (nonatomic, retain) NSMutableString *lastName;

それらを .m ファイルに合成します。

私のviewDidLoadメソッドでは、それらを空白の文字列に設定しました:

firstName = [NSMutableString stringWithString:@""];
lastName = [NSMutableString stringWithString:@""];

firstName と lastName は、ユーザーが変更できます。私の cellForRowAtIndexPath メソッドでは、これらの文字列の内容を表示しようとしています:

cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ %@", firstName, lastName];

ただし、これにより、View Controller が表示されるとすぐにアプリがクラッシュします。デバッガーを使用すると、firstName と lastName の両方が「範囲外」であるか、存在しないように見えます。Xcode は初めてですが、デバッガーは objc_msgSend で停止しているようです。

私は何を間違っていますか?

4

5 に答える 5

6

問題は、次のことを行う必要があることです。

self.firstName = ...
self.lastName = ...

これにより、自動生成されたセッター メソッドが呼び出され、値が保持されます。直接割り当てるだけでセッターをバイパスし、現在の自動解放プールが空になるとすぐに、2 つの変数にダングリング ポインターができます。

于 2010-03-27T13:11:08.310 に答える
1

置くことを習慣にしてくださいself.variableName...そして使用する代わりに...それが問題を解決することを願っています...ところで、あなたは質問を非常によく説明しました...stringWithsStringinitWithString

于 2010-03-27T13:08:56.033 に答える
0

セルは、初期化される前に firstName と lastName を読み込んでアクセスしています。viewDidLoad は遅すぎます。awakeFromNib や viewWillLoad など、iPhone にあるものを試してみてください。

于 2010-03-27T13:10:20.537 に答える
0

使用できません:

firstName = [NSMutableString stringWithString:@""];

viewDidLoad実行が終了するとすぐに解放されるため。

試す:

firstName = [[NSMutableString alloc] initWithString:@""];

または:

[self setFirstName:[NSMutableString stringWithString:@""]];

firstNameそしてリリースとlastNameオンdeallocメッセージを忘れないでください。

于 2010-03-27T13:11:54.497 に答える
0

どのセル スタイルを使用しましたか?

if (cell == nil) {
  cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
                                 reuseIdentifier:BasicCellIdentifier] autorelease];
}

おそらくこれはあなたを助けるでしょう

于 2012-03-14T08:54:39.933 に答える