iOS Swift 错误:执行被中断,原因:信号 SIGABRT
Posted
技术标签:
【中文标题】iOS Swift 错误:执行被中断,原因:信号 SIGABRT【英文标题】:iOS Swift Error: Execution was interrupted, reason : signal SIGABRT 【发布时间】:2015-03-04 20:07:58 【问题描述】:我正在尝试在操场上执行以下代码。公平地说,我平等对待两个变量 bm
和 ul
,但错误仅显示在 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
)返回不可变对象 - 所以 bm
和 ul
实际上是 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)