1

アプリケーションでNSStringに問題があります。基本的に、値「602」を含むo1stringというNSStringがあります。これを他のテキストと一緒にUIAlertViewに出力したいと思います。

votedmessage = [ NSString stringWithFormat:@"The current standings are as follows:\n\n%@: %@ votes", b1title, o1string ];
UIAlertView *votedAlert = [[UIAlertView alloc] initWithTitle:@"Thank you for voting" message:votedmessage delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];

NSLogを使用して、NSString内の値が確実に602であり、メッセージで使用される他の変数(b1title)がそれ自体で正常に出力されることを確認しました。アラートメッセージにo1votes変数を追加すると、アプリがクラッシュする理由を理解できませんが、NSString内に数字だけを保持する際の競合と関係がありますか?

これがo1stringの設定方法です。XMLファイルから取得した「602」が確実に含まれています。

o1string = [[options objectAtIndex:3] objectForKey: @"votes"];
o1string = [o1string stringByReplacingOccurrencesOfString:@"\n" withString:@""];
o1string = [o1string stringByReplacingOccurrencesOfString:@"    " withString:@""];
4

2 に答える 2

6

o1stringの割り当てが、votedmessageが作成されるのと同じメソッドにない限り(言わないので、私はそうではないと思います)、votedmessageがそれを必要とするコードに到達するまでにそれはなくなります。

ガベージコレクションを使用している場合を除き、現在のメソッドを超えて保持したいオブジェクトを保持する必要があります。詳細については、Objective-Cメモリ管理ガイドを参照してください。

于 2009-04-13T16:58:16.180 に答える
0

さらにコードを投稿する必要があります。特に、あなたが投稿した2つの作品が同じ機能にあるのか、異なる場所にあるのかは明らかではありません。

それらが異なる場所にある場合は、[o1string hold](および後で[o1string release])を呼び出す必要があります。これを行う最も簡単な方法は、olstringをretainセマンティクスを持つプロパティにすることです。

stringByReplacingOccurrencesOfStringは、関数が存在した後のある時点で自動解放される一時インスタンスを返します。

b1Titleが機能する理由は、辞書に保存されているため、永続的であるためだと思います。o1stringはstringByXXX関数から作成され、一時的なものです。

于 2009-04-13T17:00:34.600 に答える