我找不出是什麼原因造成的。基本上,一些不同的'任務'在我的應用程序中相互碰撞。當我按下一個按鈕,它運行這段代碼就好了:獲取「發送給不可變對象的變異方法」錯誤
PalAppDelegate *dataCenter = (PalAppDelegate *)[[UIApplication sharedApplication] delegate];
[dataCenter.colourPalettesContainer addObject:[NSNumber numberWithInt:5]];
因爲我喜歡它可以這樣做多次。但是,當我執行另一項任務(和那裏有一些這導致這種情況發生),其中涉及例如驗證碼:
PalAppDelegate *dataCenter = (PalAppDelegate *)[[UIApplication sharedApplication] delegate];
[dataCenter.colourPalettesContainer removeObjectAtIndex:touchDownID];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:dataCenter.colourPalettesContainer forKey:@"container"];
[prefs synchronize];
然後:
dataCenter.colourPalettesContainer = [prefs objectForKey:@"container"];
當我再次運行後的第一個代碼這會導致與「發送給不可變對象的變異方法」錯誤的崩潰。我怎樣才能阻止呢?
編輯:所以我從下面的一些答案中發現了問題。有沒有人有不同的做法,他們會建議?
您的代碼嵌套太深,人類很難理解。我建議你把你的addObject語句分成5或10個子語句。那麼如果有什麼東西壞了,你就有機會找出它的位置。 – Rayfleck 2011-04-19 01:39:46
它只是因爲我加入了保存到首選項行而已。它與我深深嵌套的Array沒有關係。我會從中刪除一些部分,以便於消化。 – Andrew 2011-04-19 01:41:19
你說「當我在這之後再次運行第一個代碼時,它會崩潰」 - 意味着嵌套數組中的某處,對吧?所以問題是你不知道分配問題在哪裏。我經歷了許多痛苦的經歷,發現像這樣高度複雜的語句不會爲您節省任何編譯或執行時間,也不會使代碼更容易維護或調試,因此不值得花時間構建它們。我不是在批評,只是提供一些友好的建議。 – Rayfleck 2011-04-19 01:49:29