2017-02-09 68 views
1

我想從NSUserdefaults中檢索NSMutableArray。該代碼給我一個例外:命令由於信號失敗:分段錯誤:11

if let chatUsersJidArray = KUtility.getUserDefault(key: KChatUsersJid) as? NSMutableArray 

給我的錯誤:

[__NSCFArray removeObjectAtIndex:]: mutating method sent to immutable object' 

後來我用下面的代碼:

if let chatUsersJidArray = KUtility.getUserDefault(key: KChatUsersJid).mutableCopy() as? NSMutableArray 

然後"Command failed due to signal:Segmentation fault:11"。任何幫助讚賞,我有很多其他的解決方案,但沒有得到一個使用可變副本。

+0

嘗試改變'斯威夫特Compiler' - '優化Level'爲'快,整個模塊Optimization',而不是'None'或建立配置版本,以根隔離問題。 – shallowThought

+0

沒有工作,發生相同的錯誤 – user2702179

+0

錯誤消息非常明顯:用戶默認值返回一個不可變數組,並且在Swift中不可能轉換爲可變基礎集合類型。不要在Swift中使用'NSMutable ...'。 – vadian

回答

0

嘗試使用本機Swift Array結構。通過定義它爲var,它會自動變爲可變

if var chatUsersJidArray = KUtility.getUserDefault(key: KChatUsersJid) as? [ARRAY_TYPE] { 
    // use the chatUsersJidArray 
} 
+0

我需要從它刪除項目,它不可能在NSarray的情況下 – user2702179

+0

如果您使用本地Swift'Array'結構作爲'variable'(as我在答案中顯示),您將能夠添加和刪除數組@ user2702179中的對象 –

-1

直接從NSUserDefaults獲得價值將不會返回Mutable對象。對於這一點,你需要抓住mutableCopy

if let chatUsersJidArray = KUtility.getUserDefault(key: KChatUsersJid) as? NSArray { 
    var arrChatJidMutable = chatUsersJidArray.mutableCopy() 
    //Now you can manipulate this array. Add/Remove/Update 
} 
相關問題