2010-04-28 61 views
1

我有一個叫做Customer的類。如何處理「發送給不可變對象的變異方法」異常?

Customer *object; //in this object i have the following data varialbles. 

object.customerName 
object.customerAddress 
object.customerContactList 

我將customerContactList聲明爲NSMutableArray,並且還分配並初始化了它。

現在我正在從contactList中添加或刪除。

//Adding. 
[object.customerContactList addObject:editcontacts];// here editcontacts one of the object in contactList. 

//Deleting. 
[object.customerContactList removeObjectAtIndex:indexPath.row]; 
[theTableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationFade]; 

即使是NSMutableArray,我也收到異常。請幫幫我。

謝謝你, 馬丹磨憨

回答

3

我在猜測,因爲Williham Totland說,我們需要看你的代碼。 customerContactList屬性是如何聲明,實現和分配的?

我的猜測是你正在使用copy的地方。如果您將copy發送到NSMutalbeArray,您將獲得不可變的副本。如果你的財產被宣佈爲:

@property (copy) NSArray* customerContactList 

當你使用它時你會得到一個不可變的數組。如果你聲明它,你甚至可能會得到一個不可改變的陣列因此(我不知道編譯器如何聰明之處):

@property (copy) NSMutableArray* customerContactList 
+0

非常感謝您,我使用「複製」以列表的副本到聯繫人列表。現在我沒有得到這種例外。 – 2010-04-28 12:51:43

+0

如果我的回答是對的,你爲什麼要勾選另一個? – JeremyP 2010-04-28 15:13:03

1

你一直在問這個問題,你繼續得到同樣的答案:「Izit」。在這方面可以得到更多幫助之前,您需要實際展示更多代碼,例如Customer的界面聲明。

什麼你應該做,在這個節骨眼上,是一種方法,沿着- (void)addToContactList:(id)contact行添加到Customer。以您描述的方式直接訪問對象上的集合對象並不被認爲是猶太教。

而另一件事:你的物業真的不需要在他們的名字中有類名;而不是Customer *object; object.customerName;你應該有Customer *customer; customer.name;等等。使代碼更具可讀性。

而且這個需要重複的說明:如果您有NSMutableArray,那麼您的不能得到該異常。這個例外是明確的證據,你實際上是而不是NSMutableArray;和不能是。這是有關例外的功能。這是例外,例外和手段。這是例外的本質,它是存在的理由,或者如果你願意的話。如果不清楚:您嘗試添加的數組不可變。它是不可變

相關問題