Ios 线程1:EXC“U BAD”指令调用时出错;addObjectsFromArray“添加对象”;NSMutableArray方法

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() {

我创建了一个程序,它根据输入到函数中的自定义对象计算某些国家的边界。此函数用于返回自定义对象的数组。我在尝试将此数组添加到NSMutableArray时一直遇到此错误。该错误称为“线程1:EXC\U BAD\U指令(代码=EXC\U 1386\U INVOP,子代码=0x0)”

以下是我的添加代码:

@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") }
}
}