2012-08-07 83 views
0

我有一個名爲客戶端的數組,我的一個類中,我想在另一個類中使用該數組中的信息。我已經建立了屬性,並在我的第一堂課中合成了這個數組。我的第一個類的代碼是從另一個類訪問數組

@synthesize client; 

... 


- (IBAction)testing:(id)sender { 
    NSString *textContent = myTextView.text; 
    textContent = [textContent stringByReplacingOccurrencesOfString:@" " withString:@""]; 
    client = [textContent componentsSeparatedByString:@"."]; 
    NSLog(@"%@", client); 
} 

在我試圖導入.h文件我的第一個類,然後只需訪問該陣列我的第二類。我使用的代碼是

- (IBAction)ButtonStuff:(id)sender { 
    ArrayManipulationViewController *myClass = [[ArrayManipulationViewController alloc]init]; 
    NSLog(@"Second Interface"); 
    NSArray *test = myClass.client; 
    NSLog(@"%@", test); 
} 
+0

很難從你寫的內容確定,但認爲'alloc'創建一個新的對象...也就是說,與以前完全不同的,也不知道的關於你在之前存儲的內容。 – 2012-08-07 14:43:35

回答

0

從多個類訪問對象,常用的方法是聲明在父類的對象,然後通過該對象的共享實例爲需要訪問的所有子類。例如,您可以在AppDelegate中聲明該數組,並在您的子類中設置數組屬性,並將該數組的實例從AppDelegate傳遞給所有子類。例如:在您的應用程序委託中創建一個NSArray(myArray),然後在AppDelegate植入中,使用屬性將myArray實例傳遞給您的子視圖控制器。

或者,如果您願意的話;您可以在第一個類中聲明該數組,然後使用屬性將數組實例從第一個類傳遞到第二個類。然後,由於INSTANCE是相同的,所以您的第二課中所做的任何更改都將在您的第一課中提供。

UPDATED ANSWER: 對於第二種方法,最好在第一個類實現中聲明數組,然後在實例化第二個類時,使用屬性將數組實例傳遞給第二個類。在這個例子中,你需要有一個NSArray財產在你的第二類能夠通過使用[secondClassInstance setClient: client];

你的第二類接口在它的陣列可能是這樣的:

@interface SecondClass : NSObject 
{ 
    NSArray *client; 
} 

@property (nonatomic, retain) NSArray *client; // don't forget to synthesize 
@end 

然後,在你的第一課,你可以做以下事情來傳遞你的數組實例:

NSArray *client = [[NSArray alloc] initWithObjects:@"Object 1", @"Object 2"]; 

//... 

SecondClass *secondClass = [[SecondClass alloc] init]; 
[secondClass setClient: client]; // passing the original client instance here 

// don't forget to release secondClass instance when finished 
+0

對於我想要做的第二種方法,你談到了陣列將是相同的是我想要的。我試圖使用屬性,但我仍然是新的Objective C和Xcode,所以我不認爲我做對了。你能否詳細說明一下如何做到這一點? – Dravus 2012-08-07 15:00:08

+0

我已經更新了我的答案。希望這對你更有用,Dravus。 – TeaPow 2012-08-07 16:59:41

+0

好吧,我嘗試了所有這一切,當我在第二課中做了一個NSLog的數組,它說空。但是,當我在第一個類中執行NSLog時,它會正確地打印出陣列。我不知道我做錯了什麼,如果你需要我的代碼中的任何內容,請讓我知道。 – Dravus 2012-08-07 17:21:54