2012-01-03 7 views
0

私はアプリケーションdelegate.hでプロパティを定義し、delegate.mファイルで合成してグローバルにし、アプリケーション全体からその値を取得して取得しました: mainviewcontrollerでiPhoneエラー:スレッド1:プログラム受信シグナル: "SIGABRT"

@property (strong, nonatomic) NSArray *accountsList; 

私はNSArrayの*は、このように、このグローバルな値に値をアカウントに割り当てるいます:

((VektorAppDelegate *)[UIApplication sharedApplication].delegate).accountsList = accounts; 

そしてpickerviewcontrollerに、私は次のように別の配列に値を代入しています:

時にはそれが動作しますが、私はエラーを取得し、自分のアプリケーションがクラッシュしているポイントこの時点では今ここに

- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component { 
    return [accounts count]; //Thread 1: Program received signal: "SIGABRT" 
} 

、時にはそれがエラーを与える:

accountsArray = ((VektorAppDelegate *)[UIApplication sharedApplication].delegate).accountsList; 

そしてはようピッカービューに割り当てます。私は何が問題になるかは分かりません。

+0

あなたはどのクラスでピッカービューを呼び出していますか?なぜならあなたは 'accountsArray'という名前を付ける前に' [accounts count] 'を使っているからです。なぜあなたは 'return [accountsArray count];を使用していないのですか? – Jules

+0

個のアカウントがあるかどうかを確認するために、accountsビューがメインビューで使用されています。アカウントはピッカービューアカウントで使用されています。そのアカウントはすべてピッカービューで表示され、ユーザーは自分のアカウントを選択します – AppDeveloper

+0

ある時点で公開されている可能性はありますか? numberofRowsメソッドでnilを返すとクラッシュせず、countメソッドにNULLを渡します。 – CodaFi

答えて

0

私は考えている...両方の配列が等しいかどうかをチェックする方法を作る。

if ([(Appdelegate*).....delegate.array isEqualToArray:Accountslist]) {NSLog:(@"equal")} 

のようなので、何かあれば、それのNSLogの正しく、あなたはねじ込みしている...しかし、そうでない場合、それはちょうどあなたが正しくあなたの配列を初期化していないことを意味します。

2

ここにあなたのコードが届いたSIGABRT

だから、まずあなたがそのSIGABRTの背後にある理由を知るためにしようと、あなたは簡単にSIGABRTことを修正することができます。

SIGABRT基本的には多くの理由があります。

1)私たちは割り当て解除にアクセスしようとしているとき(リリース)インスタンス/オブジェクト

2)または、既に割り当て解除(リリース)インスタンス/オブジェクトにリリースメッセージを送信します。

3)と、より多くの...

だからSIGABRTメッセージの背後にある正確な理由を知るために。

あなたは環境変数にYESNSZombieEnabledフラグを設定する必要があります。あなたはこのを設定することができます

は、以下のようにをNSZombieEnabled

* *製品 - >新規Scheme->環境変数

"+" ボタン**上

の下で環境変数をクリックし

次にタイプNSZombieEnabledとセットはいフラグ値に相当します。

私はSIGABRT Probを修正するのを手伝ってくれることを願っています。