2011-12-16 61 views
1

在我的程序中,我必須聲明和使用多個子項UIViewController,就像我的主UIViewController中的自定義控件一樣。但是當我點擊一個孩子UIView控制器的按鈕時,我得到一個EXC_BAD_ACCESS錯誤。請參閱以下我的示例代碼結構。在主UiViewController中動態聲明子UiViewController

例1:

//--Child------------------------------------------------------------------- 
@interface subUIViewController<UIViewController> 

    -(IBAction)myButtonClick:(id)Sender; 

[email protected] subUiViewController 

    -(IBAction)myButtonClick:(id)Sender 
    { 
      NSLog(@"Button Click Event....."); 
    } 

//---Main-------------------------------------------------------------------- 

@interface mainUIViewController<UIViewController> 

@implementation mainUIViewController 

    -(void)viewDidLoad 
    { 
      [super viewDidLoad]; 
      subUiViewController *subViewController=[[subUiViewController alloc] initWithNibNameAndArtist:@"subUiViewController" bundle:nil]; 
      [self.view addSubView: subViewController.view]; 
    } 

//--------------------------------------------------------------------------- 
//--------------------------------------------------------------------------- 

但是,如果我在MainViewController@property (retain,nonatomic) subUiViewController *subViewController宣佈,它正在沒有錯誤。請參閱下面的代碼。

例2:

//---Child------------------------------------------------------------------ 
@interface subUIViewController<UIViewController> 

    -(IBAction)myButtonClick:(id)Sender; 

@implementation subUiViewController 

    -(IBAction)myButtonClick:(id)Sender 
    { 
      NSLog(@"Button Click Event....."); 
    } 

//----Main----------------------------------------------------------------- 


@interface mainUIViewController<UIViewController> 
    @property(retain,nonatomic) subUiViewController *subViewController; 

@implementation mainUIViewController 
    @synthesize subViewController; 

    -(void)viewDidLoad 
    { 
      [super viewDidLoad]; 
      subViewController=[[subUiViewController alloc] initWithNibNameAndArtist:@"subUiViewController" bundle:nil]; 
      [self.view addSubView: subViewController.view]; 
    } 


//--------------------------------------------------------------------------- 
//--------------------------------------------------------------------------- 

我不知道爲什麼例1不工作和例2是工作。對我而言,我需要使用示例1,因爲我需要以編程方式創建基於Core Data Return的子UI視圖控制器。你能幫我指出什麼是錯的嗎?我如何動態聲明子代ui視圖控制器的代碼?

回答

1

最後,我可以看到EricLars0n和user523234的建議後,解決我的問題。我很感激。這就是方式。

@interface mainUIViewController<UIViewController> 
    @property(retain,nonatomic) NSMutableArray *myViewControllers; 

@implementation mainUIViewController 
    @synthesize myViewControllers; 

    -(void)viewDidLoad 
    { 
      [super viewDidLoad]; 

      //Sub View Controller 1 
      subUiViewController *subViewController1=[[subUiViewController alloc] initWithNibName:@"subUiViewController" bundle:nil]; 
      [self.myViewControllers addObject:subViewController1]; 
      [self.view addSubView: subViewController1.view]; 

      //Sub View Controller 2 
      subUiViewController *subViewController2=[[subUiViewController alloc] initWithNibName:@"subUiViewController" bundle:nil]; 
      [self.myViewControllers addObject:subViewController2]; 
      [self.view addSubView: subViewController2.view]; 
    } 

我用一個屬性類型的NSMutableArray和我的程序創建的孩子UIViewControllers存入此NSMutableArray裏。所以,我的孩子UiViewControllers沒有辦法停止,直到viewDidUnload。

謝謝你們!

1

在實施例1

subUiViewController *subViewController 

不復存在viewDidLoad中完成後。通常在iPhone應用程序中,每個屏幕都是它自己的視圖控制器。如果你想加載一個新的屏幕/視圖控制器,你可以像創建它一樣創建它,或者以Modally形式顯示它,或者如果你使用navigationController將它推入堆棧。

但是,如果你想要做的,你在做什麼,你的主要的viewController需要類型的ID可以多抱你創建任何類型的viewController的一個屬性。

取決於你在做什麼新的能力在iOS 5中的視圖控制器是其他視圖控制器的容器視圖控制器可能是有用的。具體地說,方法

addChildViewController: 
0

就像EricLarSOn解釋。但是,在你的情況下,你可以做什麼來聲明通用屬性的var,並動態地觸發childviewcontroller類,並將其分配給通用變量,如前所述。 例如更換您

@財產(保留,非原子)subUiViewController * subViewController;

隨着:

@property(保留,非原子)的UIViewController * myUIViewController;

然後

subUiViewController * subViewController = [[subUiViewController的alloc] initWithNibNameAndArtist:@ 「subUiViewController」 束:無];

添加此行

self.myUIViewController = subViewController;

[subViewController release];

[self.view addSubView:self.myUIViewController。視圖];

+0

謝謝你,但它仍然給我同樣的錯誤。我的應用程序使用ARC。 – 2011-12-16 10:55:16

相關問題