2012-12-08 60 views
0

好吧,我正在處理兩組非常相似的數據,同時這些數據集都是對象內的全局NSMutableArrays。使用指針來調整目標中的全局對象-c

data_set_one = [[NSMutableArray alloc] init]; 
data_set_two = [[NSMutableArray alloc] init]; 

加載了兩個新的NSMutableArrays,它們需要添加到舊的現有數據中。這些陣列也是全球性的。

xml_dataset_one = [[NSMutableArray alloc] init]; 
xml_dataset_two = [[NSMutableArray alloc] init]; 

爲了減少重複代碼(因爲這些數據集是所以類似)我寫的類內的空隙的方法來處理這兩個陣列中的數據組合處理:

-(void)constructData:(NSMutableArray *)data fromDownloadArray:(NSMutableArray *)down withMatchSelector:(NSString *)sel_str 

現在,我有一個體面的面向對象編程的理解,所以我在想,如果我要調用數據中的全局數組的方法如此... ...

[self constructData:data_set_one fromDownloadArray:xml_dataset_one withMatchSelector:@"id"]; 

然後,全局NSMutableArrays(data_set_one)將反映方法內發生的「數組」變化。可悲的是,情況並非如此,data_set_one並未反映方法外部的更改(例如:Array內的新對象)。

這裏的問題是

// data_set_one is empty 
// xml_dataset_one has a few objects 

[constructData:(NSMutableArray *)data_set_one fromDownloadArray:(NSMutableArray *)xml_dataset_one withMatchSelector:(NSString *)@"id"]; 

// data_set_one should now be xml_dataset_one, but when echoed to screen, it appears to remain empty 

的代碼段,這裏是該方法的代碼的要點,任何幫助表示讚賞。

-(void)constructData:(NSMutableArray *)data fromDownloadArray:(NSMutableArray *)down withMatchSelector:(NSString *)sel_str { 
    if ([data count] == 0) { 
     data = down; // set data equal to downloaded data 
    } else if ([down count] == 0) { 
     // download yields no results, do nothing 
    } else { 
     // combine the two arrays here 
    } 
} 

該項目未啓用ARC。

感謝您的幫助! Rob

+0

你想做什麼? –

+0

我希望data_set_one保留從void方法給出的值。它被傳入,然後通過指針「數據」進行更改。問題是,對數據所做的更改不是針對data_set_one進行的。編輯,對不起,我發現很難解釋我的問題:/ – Rob

+0

你需要保留它的價值。 newValue = oldValue,其中oldValue得到釋放結果nil到newValue。這是這裏的問題。 –

回答

0

如果我理解你的問題,你試圖傳遞你的對象作爲參考調用,並希望在C++/C中工作。但Obj-C雖然相似,但有一些不同的方法。你必須通過使用**(雙指針)來取消引用該對象,這在NSError中很常見,這很少見。

第二種方法是:將方法作爲塊使用。然後將變量放在與塊相同的詞法作用域中,並用__block存儲類型表示它。

第三種方式可以直接訪問您的對象,使其成爲一個伊娃/財產,甚至是一個單身人士。

+0

謝謝你的幫助,終於解決了這個問題,並且雙指針成功了! – Rob