2011-02-07 15 views
0

コアデータに格納されているオブジェクトに基づいて、NSFetchRequestを使用してUITableViewにセクションを作成しています。なぜクラス変数NSArrayを設定するとアクセッサメソッドを使用する必要がありますか?

viewDidLoadではフェッチ要求を行い、返されたNSManagedObjectsの配列をクラス変数NSArray * allEventsに設定します。後で私numberOfRowsInSectionに、私が呼び出ししようとしたとき、私はEXEC_BAD_ACCESSエラーを得ていた

allEvents = [context executeFetchRequest:eventFetchRequest error:&error]; 

[allEventsカウント]:私はそうのようなフェッチ要求から返された配列を設定しました。

私は上記のコード行に自己を追加することによって、フェッチ要求から、アレイを設定することで、問題を解決するために管理:これは働いていた、なぜ誰もが説明でき

self.allEvents = [context executeFetchRequest:eventFetchRequest error:&error]; 

?私は同様の状況に遭遇し、何が起こっているのか知りたいです。

ありがとうございました。

答えて

2

オブジェクトの「allEvents」プロパティはretainプロパティですので、最初のシナリオでは配列は保持されず、アクセスするまでに割り当てが解除されています。

+0

これはretainプロパティです。つまり、アクセサメソッドを呼び出すと、保持カウントが増えますか? – Aaronium112

+0

これを考える良い方法は、プロパティを保持することで、プロパティを保持しているオブジェクトに「所有」し、新しいオブジェクトが設定されたときに所有権を放棄することです。これのメカニズムは、保持回数を増減することです。合成メソッドは次のようになります。 - (void)setFoo:(id)newFoo {if(foo!= newFoo){[foo release]; foo = [newFoo retain]; }} –

関連する問題