2012-03-30 80 views
1

如果我在一個NSMutableDictionary一個可變的數組「代碼」,「分類」如何addObjectsFromArray目標是可變的,而源是不可變的?

NSMutableArray *myMutableArray=(NSMutableArray*)[categorize objectForKey:@"codes"]; 

和我從另一個非可變數組「templateCodes」在一個NSDictionary「templateCategorize」

[codes addObjectsFromArray:(NSArray*)[templateCategorize objectForKey:@"templateCodes"]]; 

添加對象代碼數組是否變成「不可變的」,因爲我複製了來自非可變數組(templateCodes)的元素?

此代碼在首次複製對象時工作,但第二次執行此代碼時出現「addObjectsFromArray」選擇器無效,表示數組不可用的錯誤。

+1

_does代碼數組變成「不可變的」,因爲我複製了來自非可變數組(templateCodes)的元素?__還有其他錯誤。 – 2012-03-30 20:08:49

回答

3

我不認爲它應該讓你的可變數組不可變 - 一個可變數組可以包含不可變對象,所以從另一個數組中添加對象不應該使它不可變。此代碼正常工作:

NSArray *theData = [NSArray arrayWithObjects:@"One",@"Two",@"Three",nil]; 
NSMutableArray *mut = [NSMutableArray arrayWithObjects:@"Four",@"Five",@"Six",nil]; 
[mut addObjectsFromArray:theData]; 
NSLog(@"%@",mut); 
NSLog(@"%@",[mut class]); 
[mut addObject:@"seven"]; 
NSLog(@"%@",mut); 

在您的代碼中還有其他事情必須發生,我沒有看到。

+0

謝謝。最終很難追查到,但它涉及到有多個陣列,並確保一些被複制。似乎有導致問題的數組元素的「懸掛」指針。 – ChrisP 2012-04-04 16:28:44

0

從NSCopying協議蘋果的文檔:

討論

返回的對象是隱式由發送者,誰是負責釋放它保留。如果考慮「不可變與可變」適用於接收對象,返回的副本是不可變的;否則該副本的確切性質由該課程確定。

相關問題