1

NSMutableDictionray のオブジェクトである NSMutableString_s の内容でラベルのテキストを設定しています...ページを 2 回ロードするとすべてが正常に機能するという問題 (つまり、ポップした後にプッシュする...) と3回目のプッシュでは、プログラムはNSMutableDictionaryのNSMutableString_sの1つのコンテンツを読み取ることができません..そのため、UILabelの値を設定するステップに進むと、値が見つかりませんでした...

例外が表示されるコードがあります:

- (void)viewDidLoad{
    [super viewDidLoad];
    NSMutableDictionary *item=[days objectAtIndex:0];
    NSString *title1=[item objectForKey:@"week_day"];
    name1.text=title1;
    [title1 release];
4

2 に答える 2

1

解放title1しないでください - によって返された文字列-objectForKey:を所有しておらず、それを保持することによって所有権を取得していません。将来それを防ぐために、 Cocoa メモリ管理ガイド
を一読することをお勧めします。

textそれがプロパティであると仮定するとretain、変更可能な文字列では、文字列のコピーを割り当てて、変更されないようにする必要があります。

NSString *title1 = [[item objectForKey:@"week_day"] copy];
name1.text = title1;
[title1 release]; // copy means taking ownership, so release

以下は、投稿されたコードで何が起こっているかの簡単な例です。

// entering -viewDidLoad the first time:
NSString *title1=[item objectForKey:@"week_day"];
// lets assume that the strings retain count is 1 here
name1.text=title1;
// setter retains, retain count now 2
[title1 release];
// retain count now 1

// entering -viewDidLoad the second time:
NSString *title1=[item objectForKey:@"week_day"];
// assuming nothing else did retain it, strings retain count is still 1
name1.text=title1;
// you assigned the same object, retain count still 1
[title1 release];
// strings retain count now 0 - will be deallocated :(
于 2010-06-04T09:57:39.743 に答える
0

ありがとうございました。中間変数でトランジションをエスケープすると正常に動作するようになりましたが、以前は 2 つの「プッシュ」アクションで動作する理由がわかりませんでした!!!

name1.text=[[days objectAtIndex:0] objectForKey:@"week_day"];
于 2010-06-04T10:43:21.100 に答える