2012-01-25 7 views
0

私は私のコードを分析すると、私は次の論理エラーを取得:のiOS:メッセージ「フレーム」のレシーバは、ゼロ

メッセージ「フレーム」の受信機がnilであると「CGRect」意志型の値を返します。ごみになる。この2行の

CGRect rectFrame = purchaseCell.lblValue.frame; 
CGRect rectFrameBG = purchaseCell.lblValueBG.frame; 

コードは素晴らしい作品が、ちょうどこれが言っているかを把握しようとしています。私は何か間違っているのですか?

編集:ここでは、完全な方法である。

purchaseCell.lblHeader.font = [UIFont fontWithName:@"AvenirNextLTPro-Regular" size:16]; 
purchaseCell.lblHeader.text = curField.fieldName; 
purchaseCell.lblValue.text = curField.fieldValue; 
purchaseCell.lblValueBG.text = curField.fieldValue; 
purchaseCell.lblValue.font = [UIFont fontWithName:@"AvenirNextLTPro-Regular" size:16]; 
purchaseCell.lblValue.backgroundColor = [UIColor clearColor]; 
purchaseCell.lblValueBG.textColor = [UIColor clearColor]; 
[purchaseCell.lblValueBG sizeToFit]; 
[purchaseCell.lblValue sizeToFit]; 
CGRect rectFrame = purchaseCell.lblValue.frame; 
CGRect rectFrameBG = purchaseCell.lblValueBG.frame; 
NSLog(@"RectFrame X: %.2f", rectFrame.origin.x); 

purchaseCell.lblValue.frame = CGRectMake(rectFrame.origin.x-rectFrame.size.width,rectFrame.origin.y, rectFrame.size.width+14, rectFrame.size.height); 
frameSizeWidth = rectFrame.size.width; 
purchaseCell.lblValueBG.frame = CGRectMake(rectFrameBG.origin.x-rectFrameBG.size.width,rectFrameBG.origin.y, rectFrameBG.size.width+14, rectFrameBG.size.height); 
+1

私の推測: 'purchaseCell'、' purchaseCell.lblValue'または 'purchaseCell.lblValueBG'コンパイラはそれができると考えて、いくつかのシナリオで、または少なくとも' nil'できることを示しているように思われます。これらの場合、 '.frame'は不正な値を返す可能性のある' nil'オブジェクトに送られます。これが可能であるかどうかを確認することができます(境界ケースのみであっても)。そうでない場合、この警告は、コンパイラがどのコードパスを取るかを予測する能力が限られていることに起因します。 –

答えて

2

アナライザは

purchaseCell.lblValue 

nilに評価されるので、何賢明値rectFrameに割り当てることができないと言っています。 purchaseCellで何をしていますか?そのコードのプロパティは他の場所にありますか?

「受信機」は、「フレーム」メッセージを受信して​​いるオブジェクトを意味します。

あり、細胞またはそのlblValueプロパティがnilかもしれないいくつかのコードの分岐がある可能性があり、そしてアナライザがそれを好きではないように見えます。 nilの値をチェックし、そうでしょう、おそらくあなたのために出て、それを明確に(とは、すべての可能なエラーを回避する)場合は、本当の原因が何であるかを見つけることができない場合は、返却の@StilesCrisis'の提案。

+0

私はlblValueとlblValueBGのいくつかの特別なサイズ変更をやっていると私はので、私は新しいCGRectを作成することができて開始する現在のフレームを必要とします。それはすべて動作します。 rectFrameはlblValueから完全に細かいフレームオブジェクトを取得します。 – Jesse

+0

残りのメソッドを質問に含めることができますか、それとも27ページですか? – jrturton

+0

大丈夫、私は基本的に、lblValueで毎回テストが更新される、その周りの背景ラベルのサイズを変更する必要があり、私はXIBでそれを見つけるところからシフトを使用していますフォントいるので、私はいくつかの特別なをしなければならない、オペアンプを更新コード内でシフトする – Jesse

関連する問題