iOS Swift 错误:执行被中断,原因:信号 SIGABRT

Posted

技术标签:

【中文标题】iOS Swift 错误:执行被中断,原因:信号 SIGABRT【英文标题】:iOS Swift Error: Execution was interrupted, reason : signal SIGABRT 【发布时间】:2015-03-04 20:07:58 【问题描述】:

我正在尝试在操场上执行以下代码。公平地说,我平等对待两个变量 bmul,但错误仅显示在 ul

import UIKit

let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject([], forKey: "bookmarks")
defaults.setObject([], forKey: "urls")

var bm : NSMutableArray = defaults.valueForKey("bookmarks") as NSMutableArray
var ul : NSMutableArray = defaults.valueForKey("urls") as NSMutableArray

bm.addObject("Google")                 //--->Works
ul.addObject("http://google.com")      //--->Oops, No

【问题讨论】:

这让我大吃一惊。 ;) 这真的很奇怪。这是错误:Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'. 【参考方案1】:

我无法告诉您为什么第一个有效而第二个无效 - 这可能只是游乐场、时间安排和将 NSUserDefaults 持久保存到磁盘的延迟。

但是,您的问题是 valueForKey(您应该使用 objectForKey)返回不可变对象 - 所以 bmul 实际上是 NSArray 实例,您不能简单地将它们转换为NSMutableArray。当您尝试这样做并对对象进行变异时,您会遇到崩溃。

您需要创建数组的可变副本。

 var bm=defaults.objectForKey("bookmarks") as NSArray?

 if bm != nil 
    var bmCopy=bm!.mutableCopy() as NSMutableArray
    bmCopy.addObject("Google")
    defaults.setObject(bmCopy, forKey:"bookmarks")
 

【讨论】:

以上是关于iOS Swift 错误:执行被中断,原因:信号 SIGABRT的主要内容,如果未能解决你的问题,请参考以下文章

错误:执行被中断,原因:断点 1.2。 Xcode 7.1,斯威夫特

关于 Swift:执行被中断,原因:EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0)

Swift 扩展异常执行被中断,原因:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

ios中的奇怪崩溃Signal和EXC_BAD_ACCESS错误分析

Swift:错误:在隐式展开可选值时意外发现 nil

进程以退出代码 139 结束(被信号 11 中断:SIGSEGV)