2011-01-03 5 views
0

ラベルのテキストを変更しようとすると何らかの理由でクラッシュするというコードがあります。 UILabelに値を割り当てるときにシミュレータがクラッシュする

- (void) viewDidLoad { 
    [super viewDidLoad]; 
    NSString * path = [[NSBundle mainBundle] pathForResource:@"Subs" ofType:@"plist"]; 
    NSMutableDictionary * modelDict = [NSMutableDictionary dictionaryWithContentsOfFile:path]; 
    NSDictionary * yearDict = [modelDict valueForKey:Sub_Model]; 
    for (NSString * yearKey in yearDict) { 
     NSDictionary * sizeDict = [yearDict valueForKey:yearKey]; 
     mount_depth = round([[[sizeDict valueForKey:Sub_Size] objectForKey:@"Mounting Depth"] floatValue]); 
     displacement = round([[[sizeDict valueForKey:Sub_Size] objectForKey:@"Displacement"] floatValue]); 
     sealed_min = [[[sizeDict valueForKey:Sub_Size] objectForKey:@"Sealed Min."] floatValue]; 
     sealed_max = [[[sizeDict valueForKey:Sub_Size] objectForKey:@"Sealed Max."] floatValue]; 
     ported_min = [[[sizeDict valueForKey:Sub_Size] objectForKey:@"Ported Min."] floatValue]; 
     ported_max = [[[sizeDict valueForKey:Sub_Size] objectForKey:@"Ported Max."] floatValue]; 
     minportlen = [[sizeDict valueForKey:Sub_Size] objectForKey:@"Min. Port Len."]; 
     maxportlen = [[sizeDict valueForKey:Sub_Size] objectForKey:@"Max. Port Len."]; 
    } 
    // [self loadEnclosure]; 
    portlenLbl.hidden = FALSE; 
} 

は、それから私は、どのようなユーザーが選択に応じてラベルを変更するには、ナビゲーションアイテムのセグメント化されたコントロールを持っており、彼らはデフォルト以外を選択したときにときに、プログラムがクラッシュしたものです。

- (IBAction) boxSize:(id)sender { 
    // [self loadEnclosure]; 
    switch (self.boxControl.selectedSegmentIndex) { 
     case 0: 
      portlenLbl.text = (@"%@", minportlen); 
      break; 
     case 1: 
      portlenLbl.text = (@"%@", maxportlen); 
      break; 
     default: 
      break; 
    } 
} 

私はまた、複数のビューは、このポイントに入る前にあることを追加する必要があり、彼らは「再これと同様の方法を使用して呼び出さ:

- (IBAction) GetBox:(id)sender { 
    K_Box * KView = [[K_Box alloc] initWithNibName:nil bundle:nil]; 

    KView.Num_Subs = self.Num_Subs; 
    KView.Box_Type = self.Box_Type; 
    KView.Box_Shape = self.Box_Shape; 
    KView.Sub_Model = self.Sub_Model; 
    KView.Sub_Size = self.Sub_Size; 
    [self presentModalViewController:KView animated:YES]; 
} 
+0

投稿を編集するには十分な評判がありません。コードタグを使用してもう少し正確に整列してください。 //編集:ありがとう@aBitObvious –

+0

ええ、私はそれがファンキーな出てきたようにあなたが投稿したときにそれを編集していた。ごめんなさい。 –

+0

が実現しました。ライブプレビューがありますか? – vikingosegundo

答えて

2

あなたの本当の問題はここにある:

minportlen = [[sizeDict valueForKey:Sub_Size] objectForKey:@"Min. Port Len."]; 
maxportlen = [[sizeDict valueForKey:Sub_Size] objectForKey:@"Max. Port Len."]; 

objectForKey:は、インスタンス変数に直接割り当てる自動解放オブジェクトを返します。あなたのアプリがboxSize:メソッドに達する頃には、それらの値はそれらを管理している自動解放プールから流出したため、範囲外です。

minportlen = [[[sizeDict valueForKey:Sub_Size] objectForKey:@"Min. Port Len."] retain];   
maxportlen = [[[sizeDict valueForKey:Sub_Size] objectForKey:@"Max. Port Len."] retain]; 

(あなたがプロパティとしてインスタンス変数を定義した場合もちろん、あなたが指定したプロパティのセッターを使用する必要があります。だから、解決策はobjectForKey:の単純retain戻り値にして、直接あなたのインスタンス変数にそれを割り当てるです代わりに代わりに。)

+0

または[NSString stringWithFormat:@ "%@"、maxportlen];彼が書式を適用したいと思うなら、私は知っている、私は完全性のためにいくつかの投稿をコメントする^^私は楽しいことをしている:p –

+0

@iPortableはい、OPは望んでいないようです。 –

+0

もともとより多くのテキストが関わっていましたが、デバッグのためにそれを削除しました。このようにしてもクラッシュします。 –

0

ちょうど使用portlenLbl.text = [[NSString stringWithFormat:@ "%@"、maxportlen]; 。 ラベルテキストを設定するときは常に上記の構文を使用することを忘れないでください。

+0

この課題を使用しても依然として同じ問題が発生しています。 –

+2

私はこの回答がupvotedと信じられない。 –

+1

すでにNSStringのオブジェクトに 'stringWithFormat:@"%@ "'を使用すると、オーバーヘッドが不要になります。フォーマットがないので、デバイスがフォーマット文字列を評価するのはなぜですか? –

関連する問題