2017-02-09 67 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 
} 
相关问题