簡體   English   中英

如何將對象從一個ViewController傳遞到另一個ViewController

[英]How do I pass object from one ViewController to another ViewController

我有一個調用AddQuoteViewController的RootViewController,並且在RootViewController中設置了一個變量“ subject_id”,該變量未顯示在AddQuoteViewController中,我需要幫助來了解為什么以及如何修復它。

    Subject *sub = [self.tableDataSource objectAtIndex:indexPath.row];

    self.subject_id = sub.subject_id;

    [self addQuote_Clicked: sub];

...

- (void) addQuote_Clicked:(id)sender {

    if(aqvController == nil)
        aqvController = [[AddQuoteViewController alloc] initWithNibName:@"AddQuoteView" bundle:nil];

    if(addNavigationController == nil)
        addNavigationController = [[UINavigationController alloc] initWithRootViewController:aqvController];

    [self.navigationController presentModalViewController:addNavigationController animated:YES];
}

然后在我的AddQuoteViewController中,嘗試像這樣訪問此變量:

RootViewController *rv = [RootViewController alloc] ;

NSLog(@"rv.Subject_id = %d", rv.subject_id);

但是什么也得不到。 必須有一種簡單的方法來執行此操作。

首先,您的第三段代碼中有一個錯誤。 這個:

RootViewController *rv = [RootViewController alloc] ;

應該是這樣的:

RootViewController *rv = [[RootViewController alloc]init];

但是嚴格來說,這不是為什么您沒有看到實例變量的原因。

如果我理解正確,則代碼的前兩個塊位於RootViewController ,它們實例化一個AddQuoteViewController並將其呈現。 然后,在您的第三個代碼塊(位於AddQuoteViewController ,您想要訪問RootViewController的成員變量( subject_id )。

of RootViewController . AddQuoteViewController內實例化RootViewController的方法不起作用,因為您正在創建RootViewController 您所追求的是您剛來自的實例中的值。

也許最簡單的方法是在AddQuoteViewController上創建相應的屬性,並在創建時進行設置:

- (void) addQuote_Clicked:(id)sender {

if(aqvController == nil)
    aqvController = [[AddQuoteViewController alloc] initWithNibName:@"AddQuoteView" bundle:nil];

if(addNavigationController == nil)
    addNavigationController = [[UINavigationController alloc] initWithRootViewController:aqvController];

aqvController.subject_id = self.subject_id;

[self.navigationController presentModalViewController:addNavigationController animated:YES];
}

您需要像在RootViewController上一樣在AddQuoteViewController上創建subject_id屬性。

您不能像這樣跨視圖控制器訪問變量。 看一下如何創建可全局訪問的單例類。 我認為例外之一是您可以在AppDelegate中訪問它們,但建議不要使用全局變量。

這樣做的方法有很多種,但答案很簡單-您可以將對RootViewController的引用設置為AddQuoteViewController上的一個屬性。

在AddQuoteViewController.h中

RootViewController *rvc

...

@property (nonatomic,assign) RootViewController *rvc;

並在實現類中進行相應的合成和發布。 (AddQuoteViewController.m)

然后,當您在RootViewController中創建AddQuoteViewController時,還要設置此屬性:

- (void) addQuote_Clicked:(id)sender {

    if(aqvController == nil)
        aqvController = [[AddQuoteViewController alloc] initWithNibName:@"AddQuoteView" bundle:nil];
    aqvController.rvc = self;
... etc.

然后,您可以通過以下屬性訪問AddQuoteViewController內部的根視圖控制器的任何屬性:

NSLog(@"rv.Subject_id = %d", self.rv.subject_id);

附帶說明一下,您在問題中所做的一些事情有些不尋常,例如嘗試通過分配一個新對象來引用該對象,並創建一個新的導航控制器並將其顯示為模式視圖控制器通常您會做一個或另一個(並且不需要創建新的導航控制器)。 也就是說,您要么創建一個視圖控制器並以模態形式顯示它,要么創建一個視圖控制器並將其推入當前的導航控制器堆棧中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM