2011-06-21 3 views
1

私は完全にこの上のアイデアをしています...私は、私はめまいだ非常に多くのバリエーションを試してみた...動的にインスタンス化されるクラス(Objective-Cの)からメインビューコントローラのプロパティの設定値

私はメインのUIViewControllerを持っています。これは、ボタンを押すだけで、サブビューの1つに別のUIViewControllerを追加します。動的UIVCが追加されると、メインUIVCのプロパティが更新されて、currentObjectと呼ばれる参照を保持します。これはうまくいきます。

私は別の動的UIVCを追加すると、参照を保持するプロパティが最初は正しく更新されていますが、試しても最初の動的なものに触れると更新するプロパティを取得できませんUIVC。ダイナミックUIVCから "currentObject"を設定しようとすると、 "クラスに送られたセレクタが認識されない"というエラーが出て、それからbailsが発生します。

私は最初にこの投稿にコードを書き留めています。私はそれが役立つだろうと私は何を投稿するか分からない。

ありがとうございます!

更新日:

DynamicModuleViewController.hに:

@interface DynamicModuleViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIPopoverControllerDelegate, UIGestureRecognizerDelegate, UITextViewDelegate, UIApplicationDelegate, MFMailComposeViewControllerDelegate>{ 

DynamicModule *currentObject; 

} 

@property(nonatomic, retain) DynamicModule *currentObject; 

DynamicModuleViewController.mに:

ボタンタップから、この方法を追加
@implementation DynamicModuleViewController 

@synthesize currentObject; 

-(void)addObject:(id)sender 
{ 
DynamicModule *dm = [[DynamicModule alloc]init]; 
// positioning and PanGesture recognition code to allow dragging of module 
currentObject = dm; 
[mainView addSubview:currentObject.view]; 
} 

@end 

、それが正常に動作します。

もう一度DynamicModuleをインスタンス化すると、最後にタップされたDynamicModuleでcurrentObjectを更新する必要があります。

+2

役に立つ追加コード:メインUIVCの 'currentObject'、エラーを作成するメソッド、エラーそのもの。 – PengOne

+0

私は一からすべてを始める必要があると思います。 – Eric

答えて

1

このすべてのサブビューの1

まずに別のUIViewControllerを追加するには、私には赤い旗です。 UIViewControllerのビューをサブビューとして追加することは、ほとんどの場合、ビュー階層とiOSアプリケーションの一般的な間違いを管理するための間違った方法です。 http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/を参照してください。トピックにとどまり、自分自身を繰り返さないようにしてください。

currentObject = dm;

これは、あなたのcurrentObjectプロパティを直接裏付けするivarを設定します。以前の値currentObjectがリークしています。以前のcurrentObjectのビューをmainViewから削除していないようです。私はcurrentObjectをオートレリースされたオブジェクトに設定していて、セッターをバイパスしたためにそれを保持できず、最終的にリリースされたオブジェクトにメッセージを送信しようとしていると思われます。存在しなくなったオブジェクトを参照しようとすると、メモリアドレスまたはBAD_ACCESSエラーが発生します。

self.currentObject = foo[self setCurrentObject:foo]に相当し、おそらくあなたが意図したものです。

+0

ありがとう、ジョナ。私は仕事の後でこれをもう一度見て、結果を取り戻すつもりです。 – Eric

0

デリゲートパターンの使用はどうですか?

関連する問題