Ios 线程1:EXC“U BAD”指令调用时出错;addObjectsFromArray“添加对象”;NSMutableArray方法
我创建了一个程序,它根据输入到函数中的自定义对象计算某些国家的边界。此函数用于返回自定义对象的数组。我在尝试将此数组添加到NSMutableArray时一直遇到此错误。该错误称为“线程1:EXC\U BAD\U指令(代码=EXC\U 1386\U INVOP,子代码=0x0)” 以下是我的添加代码:Ios 线程1:EXC“U BAD”指令调用时出错;addObjectsFromArray“添加对象”;NSMutableArray方法,ios,swift,nsmutablearray,nsobject,Ios,Swift,Nsmutablearray,Nsobject,我创建了一个程序,它根据输入到函数中的自定义对象计算某些国家的边界。此函数用于返回自定义对象的数组。我在尝试将此数组添加到NSMutableArray时一直遇到此错误。该错误称为“线程1:EXC\U BAD\U指令(代码=EXC\U 1386\U INVOP,子代码=0x0)” 以下是我的添加代码: @IBOutlet var Label: UILabel! @IBOutlet var imageView: UIImageView! override func viewDidLoad() {
@IBOutlet var Label: UILabel!
@IBOutlet var imageView: UIImageView!
override func viewDidLoad() {
//Afganistan
Afghanistan.name = "Afghanistan"
Afghanistan.borders.addObjectsFromArray(relate(Afghanistan))
Label.text = String((Afghanistan.borders[0] as! develop).name)
}
以下是relate方法以及组字典:
func relate(X : develop) -> Array<develop>{
var A : [develop] = []
for (_, value) in groups {
for y in value {
if y.name == X.name {
for i in value {
if i.name != X.name {
A.append(i)
}
}
}
}
}
return A
}
//Groups
var groups = [
"one": [Afghanistan]
]
“Afghanistan”是develop的子类您需要显示“Afghanistan”类的规范以及如何初始化它。一种可能性是属性
borders
为nil。除非你有很好的理由,否则对属性使用隐式展开选项不是一种好的做法。@MarcKhadpe感谢relate方法,我在relate方法中做了一个if语句,不允许返回放入的对象。
class develop : NSObject, NSCoding {
//Shared
var power : Int!
var name : String!
var image : UIImage!
var flag : UIImage!
var militaryName : String!
//Military
var experience : Int!
var OATC : Int!
var navy : Int!
var airforce : Int!
var artillery : Int!
//Geography
var borders : NSMutableArray!
var cities : NSMutableArray!
//Biomes
var biom : NSMutableArray!
var continent : String!
var NSEW : String!
//Encoding Section
required convenience init(coder decoder: NSCoder) {
self.init()
//shared
self.power = decoder.decodeObjectForKey("power") as! Int
self.name = decoder.decodeObjectForKey("name") as! String
self.image = decoder.decodeObjectForKey("image") as! UIImage
self.flag = decoder.decodeObjectForKey("flag") as! UIImage
self.militaryName = decoder.decodeObjectForKey("militaryName") as! String
//Military
self.experience = decoder.decodeObjectForKey("experience") as! Int
self.OATC = decoder.decodeObjectForKey("OATC") as! Int
self.navy = decoder.decodeObjectForKey("navy") as! Int
self.airforce = decoder.decodeObjectForKey("airforce") as! Int
self.artillery = decoder.decodeObjectForKey("artillery") as! Int
//Geography
self.borders = decoder.decodeObjectForKey("borders") as! NSMutableArray
self.cities = decoder.decodeObjectForKey("cities") as! NSMutableArray
self.continent = decoder.decodeObjectForKey("continent") as! String
self.NSEW = decoder.decodeObjectForKey("NSEW") as! String
}
convenience init(
power: Int, name: String, image: UIImage, flag: UIImage,
relations: NSMutableArray, mName: String, experience: Int,
OATC: Int, navy: Int, airforce: Int, artillery: Int,
borders: NSMutableArray, cities: NSMutableArray,
biom: NSMutableArray, continent: String, NSEW: String )
{
self.init()
//shared
self.power = power
self.name = name
self.image = image
self.flag = flag
self.militaryName = mName
//military
self.experience = experience
self.OATC = OATC
self.navy = navy
self.airforce = airforce
self.artillery = artillery
//geography
self.borders = borders
self.cities = cities
self.biom = biom
self.continent = continent
self.NSEW = NSEW
}
func encodeWithCoder(coder: NSCoder) {
//Shared
if let power = power { coder.encodeObject(power, forKey: "power") }
if let name = name { coder.encodeObject(name, forKey: "name") }
if let image = image { coder.encodeObject(image, forKey: "image") }
if let flag = flag { coder.encodeObject(flag, forKey: "flag") }
if let militaryName = militaryName { coder.encodeObject(militaryName, forKey: "militaryName") }
//Military
if let experience = experience { coder.encodeObject(experience, forKey: "experience") }
if let OATC = OATC { coder.encodeObject(OATC, forKey: "OATC") }
if let navy = navy { coder.encodeObject(navy, forKey: "navy") }
if let airforce = airforce { coder.encodeObject(airforce, forKey: "airforce") }
if let artillery = artillery { coder.encodeObject(artillery, forKey: "artillery") }
//geography
if let borders = borders { coder.encodeObject(borders, forKey: "borders") }
if let cities = cities { coder.encodeObject(cities, forKey: "cities") }
if let biom = biom { coder.encodeObject(biom, forKey: "biom") }
if let continent = continent { coder.encodeObject(continent, forKey: "continent") }
if let NSEW = NSEW { coder.encodeObject(NSEW, forKey: "NSEW") }
}
}