2011-01-05 1 views
0

アップルのオリジナルのPhotos.appのようなフォトギャラリーを作成したいと思います。 AppDelegateでUITabbarcontrollerを作成してから、 "ImageViewController"と "VideoViewController"を作成しました。 「ImageViewController」で自分のiPadフォトギャラリーを作成する - deallocエラー

i'veは、作成した「フォトギャラリー」i'veについて

をUIScrollViewのを添加し、次いでimagePerRowような異なる特性を有する自分の「フォトギャラリー」のインスタンスを作り、画像、パディング等"NSObject"のサブクラスとしての新しいobjective-cクラスです。ここでは、すべての異なるイメージをUIButtonとして配置しています。 次に、デバイスの向きが変更されたときに、すべての画像の配置を説明する別の機能を追加しました。そしてdealloc関数。それで全部です。

このクラスは機能し、デバイスの向きが変更されたときの並べ替えも効果的です。問題は、ios-simulatorでメモリ警告をシミュレートするとPhotoGalleryが正しくdeallocを初めて取得したときですが、警告を再度シミュレートすると、エラーメッセージが表示されます。「[PhotoGallery release]:メッセージが割り当て解除されたインスタンスに送信される"

私はNSObjectのようにサブクラスだと思っていました。 それからUIViewとしてテストしました。同じエラーが発生しました。だから私はもう何をすべきか分からない。あなたは何が問題なのか理解してくれることを願っています。それについてのヒントを教えてください。 init関数をもう一度呼び出すことを考えてみましょうか?どうやって? "drawRect"が必要ですか?私は分かりません。あなたの時間と助けを

おかげで、 G.

+1

これはあなたの質問に答えません(したがって、コメントとして追加します)が、あなたはthree20を使用することを検討しましたか?彼らには、Photosアプリのほとんどの優れた実装があります。 – donkim

+0

うん。返信ありがとう。私はそれを私自身で書く方法を学びたいと思う。私は3つのソースを見ていましたが、現時点で私にとっては難しかったので、私はステップバイステップでそれを学ぶことにしました。 – geforce

答えて

1

おそらくnilにフォトギャラリーへの参照を保持しているプロパティを設定していません。

ie。解放されたインスタンスへの参照を保持し、releaseを呼び出そうとしています。

悪い例:

- (void) didReceiveMemoryWarning 
{ 
    [photoGallery release]; 
} 

安全な(R)例:

- (void) didReceiveMemoryWarning 
{ 
    [photoGallery release]; 
    photoGallery = nil; 

    // or combine both actions if your property attributes are set up to accommodate it: 
    // self.photoGallery = nil; 
} 

悪い例では、フォトギャラリーは、まだ今割り当て解除インスタンスへの参照を保持し、第2のメモリ警告が意志メッセージを送信しようとします。

safe(r)の例では、photoGalleryはnilであり、nilにメッセージを送信することは安全です。

+0

YEAHHHH!すばらしいです!それは簡単に修正できますか?ニース! NSObjectのViewControllerまたはSubclassを修正する必要があると私は考えました。しかし、正確には、私は写真ギャラリーを無しに設定していませんでした! – geforce

+0

しかしもう一度質問:PhotoGalleryクラスはNSObjectまたはUIViewのサブクラスでなければならないのですか?両方のメリットは何ですか? – geforce

+0

メモリ管理メソッドはNSObjectで宣言されています。 UIViewからサブクラス化すると、ビューのすべてのビルトイン機能が得られます。継承に関する質問が出たら、「私のクラスは<クラスの名前を挿入するのですか?>そうなら、それから継承します。 – codelark

関連する問題