2013-01-15 60 views
0

我有2個視圖控制器:發送陣列的ViewController的iOS的xcode

指數 二 在索引我有2個文本框和按鈕。

我填充這個文本字段,然後按下「下一個按鈕」到第二個視圖,我需要通過使用Array(稍後我將發送JSON數據)「顯示」這兩個文本字段。

我試過這個: 在class Second中聲明@property作爲textArray。然後在從索引推到Second時,需要設置此屬性。

在Second.h文件,

@property(nonatomic, strong) NSArray *textArray; 

在Index.m文件,

Second *aSecond = [[Second alloc] init]; 
aSecond.textArray = @[textField1.text, textField2.text]; 

//寫代碼從指數推到二 現在在課堂其次,你可以用它as aSecond.textArray [0]和aSecond.textArray [1]

但是,如果我切換頁面(單擊下一步)數組已被禁止。

,因爲我用這個開關頁:

SecondPage *SecondPage = [self.storyboard instantiateInitialViewController]; 
    SecondPage = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondPage"]; 
    [self SecondPage animated:YES]; 

我怎樣才能最好的實現?請幫忙!最好的問候 伊萬。

+0

永遠不要將您的類名稱作爲您的實例變量名稱。它會導致很多問題。 –

+0

你有沒有分配你的數組? – Rushi

回答

-3

有很多方法可以將值從一個控制器轉移到另一個控制器,但對您而言,我認爲這將是最簡單的。使用NSUserDefaults

首先簡單的方法

在第一控制器

[[NSUserDefaults standardUserDefaults] setObject:@[textField1.text, textField2.text] forKey:@"listOfData"]; 

在第二控制器

NSArray *array = [[NSUserDefaults standardUserDefaults]objectForKey:@"listOfData"]; 

第二個簡單的方法就是

DetailVC *detailVC = [self.storyboard instantiateInitialViewController]; 
detailVC = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailVC"]; 
detailVC.textArray = @[textField1.text, textField2.text]; 
+3

它可能工作,但這樣做的方式錯了。它只執行壞習慣和意大利麪代碼。一個進入你的代碼的人應該知道只需要找到第二個'UIViewController'初始化方法,爲了使它工作,它應該接收一個'NSArray'。 @pradeepa的答案比這個好得多。 – Peres

+0

@JackyBoy,你如何看待Pradeepa的答案,當他將'secondPage'實例化爲'secondPage = [self.storyboard instantiateViewControllerWithIdentifier:@「SecondPage」];'。你不能使用該代碼。 – iDev

-2
SecondPage *SecondPage = [self.storyboard instantiateInitialViewController]; 
    SecondPage = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondPage"]; 
    [self SecondPage animated:YES]; 

1)您的變量名和類名相同 2)我不知道的XCode接受了你寫的[自SecondPage動畫:是];

最後,你有沒有分配你的數組?

編輯;

哦,:

aSecond.textArray = @[textField1.text, textField2.text]; 

你應該寫:

[aSecond.textArray addObject:textField1.text]; // using NSMutableArray 
2

你需要做的是這樣的,如果你是通過故事板使用它,

SecondPage *aSecondPage = [self.storyboard instantiateInitialViewController]; 
aSecondPage = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondPage"]; 
aSecond.textArray = @[textField1.text, textField2.text]; 
[self aSecondPage animated:YES]; 

當你做這aSecond = [[Second alloc] init];,然後做aSecondPage = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondPage"];,這是創建一個單獨的實例,而不是相同的實例ES。你在第一個數組上設置這個數組,並期待它在第二個實例上被設置。

3

爲第二個視圖控制器編寫你自己的指定初始化器。

 
-(id)initWithTextArray:(NSArray *)_textarray; 

現在的Alloc初始化在第二視圖控制器的viewDidLoad方法的第二視圖控制器

 
Second *aSecond = [[Second alloc] initWithTextArray:array]; 

使用textarray來填充你的觀點。

+1

我想你應該解釋一下如何使用代碼來解決這個問題,他使用'secondPage = [self.storyboard instantiateViewControllerWithIdentifier:@「SecondPage」];'。你會怎麼做呢? – iDev

0

餵過你試過「格洛bal變量&使用委託方法的數組'。它不會釋放,直到你將刪除。直到應用程序實例纔會是全局的。

在委託類,

.h文件中

NSMutableArray *obj; 

.m文件,

Synthesize & Alloc - init array. 

然後,

在ViewContoller .m文件

AppDelegate *app; 
app = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

然後,

[app.obj addObject: text1.text]; 

在二.m文件,你可以使用它。請記住,只要你想這個數組,你應該初始化'Delegate'類的'app'對象。

它會工作&全球存儲數據。

謝謝。

0

我能想到的兩種方法:

1)無論是在第二和初始化調用它,並且傳遞值作爲參數傳遞給一個方法後添加的方法。所以在Second.m -(void) push :(NSArray *)array{}傳遞它與「&」之前你的NSArray名稱。

2)首先創建一個getter。自NS,你必須使用指定所以在First.h你把@property(nonatomic, assign) NSArray *array1; 在First.m您添加@synthesize array1;self.array1 = [@"t", @"e", @"s", @"t"]; 然後調用它通過在第二參考頭等艙和創建第二變量.m並得到它 NSArray *array1 = first.array1;

你可以寫你自己的getter,但不合理。