2012-01-08 5 views
1

可能性の重複をリリース:
index 0 beyond bounds for empty array errorのallocは、init

私は、iOSプログラミングの趣味です。そして、私はいつもプログラミング中に同じ問題を抱えています。 私はメモリ管理の問題を理解していないと思います。

H-ファイル: NSMutableArrayの含有NSStrings

NSMutableArray *pictureStrings; 

@property (nonatomic,retain) NSMutableArray *pictureStrings; 
M-ファイルで

@synthesize pictureStrings; 

とのviewDidLoadメソッド

pictureStrings = [[NSMutableArray alloc] init]; 
にこれは私の実際のプロジェクトであります

deallocメソッド

[pictureStrings release]; 

大丈夫。私は、文字列の数を取得し、非同期URLリクエストで働いていると私は

if (pictureStrings != nil) { 
    cell.textLabel.text = [NSString stringWithFormat:@"%@", [pictureStrings objectAtIndex:indexPath.row]]; 
} 
ようcellForRowAtIndexPathメソッドで値を読むときconnectionDidFinishLoadingデリゲートメソッドで値がpictureStrings

[pictureStrings addObject:aString]; 

しかし に格納されます

*期間:メッセージと

私のアプリがクラッシュしました理由は、キャッチされない例外により 'NSRangeException' にアプリをinating: '* - [NSMutableArrayのobjectAtIndex:]:空の配列の境界を越えてインデックス0'

は私のせいではどこにありますか? 私を助けてください!

あなた、Raphael。 挨拶オーストリア

答えて

3

からあなたのクラッシュは、メモリ管理の問題ではありません。あなたのクラッシュは、あなたが配列の終わりを過ぎて読んでいるということです。私たちは、([1] nil戻りnilメッセージングので)それがnilだった場合、その後objectAtIndex:方法は黙ってただnilを返されていたのでpictureStringsは、その時点で非ゼロであることを知っています。ああ、とにかくobjectAtIndex:への呼び出しの周りにifを持っていることは言うまでもありませんが、あなたはそれを必要としないはずのものとして安全に削除することができます。

だから、本当にここに起こってすることができます唯一のことは、テーブルビューが再ロードされる前に、あなたの[pictureStrings addObject:aString]が呼び出されていないということです。しかし、テーブルビューのtableView:numberOfRowsInSection:データソースメソッドでreturn pictureStrings.countのようなことをしていると仮定しているため、これはかなり奇妙です。実際に配列に要素がない場合は、テーブルビューは行を要求しないため、このクラッシュは発生しません。

あなたの問題は、配列に文字列を追加していない可能性が高いと思います。あなたはそのコードをブレークポイントでチェックし、何が起こっているかを見ることができます。

また、これにセルのテキストを設定するようにコードを変更することを検討:

cell.textLabel.text = [pictureStrings objectAtIndex:indexPath.row]; 

あなたはなぜstringWithFormat:コールを経由わざわざ彼らはすでに文字列であると述べましたか?

[1]警告:常にnilを返すとは限りません - 詳しくは、こちらをご覧ください。

+0

こんにちは。私の愚かな欠点の1つでした。あなたが正しいです。メモリ管理の問題ではありませんでした。私の考えは、すべてのパスを画像にロードするだけで、tableViewの最初の10個を表示することでした。そのため、エラーが作成されました。 ありがとうございます! – Raphael

関連する問題