2016-03-30 10 views
1

JSONを解析して配列にデータを追加していますが、配列に正しい数の要素が含まれています。最後に追加されたものがあった。ここで私が使用していたコードです:私は配列を印刷するとき配列には最後の値が追加されていますが、カウントはまだ同じです

if (statusCode == 200) { 
    do{ 
     let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments) 
     if let ns = json as? NSArray{ 
     for ns in ns{ 
      if let name = ns["name"] as? String{ 
      if let number = ns["number"] as? Int{ 
       if let cn = ns["cyclenumber"] as? Int{ 
       if let url = ns["url"] as? String{ 
        self.c.name = name 
        self.c.number = number 
        self.c.cycleNumber = cn 
        self.c.url = url 
        self.n.array.append(self.c) 
       } 
       } 
      } 
      } 
     } 
     } 

    }catch { 
     print("Error with Json: \(error)") 
    } 

} 

が、それだけでしかし、多くの要素が追加されたプリントは、しかし、彼らは最後の要素のすべての重複を追加しています。

+5

聖ピラミッド... – PeejWeej

+0

ns'コンパイルでナノ秒のために、すべての 'していますか? – vadian

+0

私はそれがうまくいくと思いますが、あなたはnsという配列にアクセスすることができないので、非常に悪い習慣であり、非常に混乱します。 (1文字または2文字の名前が付いていますが、それは別の問題です) – PeejWeej

答えて

1

問題は、正常なインスタンスを追加し続けることです。つまり、self.cです。 cのタイプはであり、structではないため、コピーは行われません。同じ参照がアレイに繰り返し追加されます。

あなたはcのタイプstruct、またはループの各反復で新しいcを割り当てることによって行うことによってこの問題を解決することができます

if let url = ns["url"] as? String { 
    var c = TypeOfC() // Make a new instance 
    c.name = name 
    c.number = number 
    c.cycleNumber = cn 
    c.url = url 
    self.n.array.append(c) 
} 

cはもはやselfのメンバーであることを。ループ内でcを変更しているため、メンバーにすることは最初の間違いである可能性が非常に高いです。運命バットマンの

+0

素早く答えてくれてありがとう! – chrisz

1

回答者のすでに与えられたが、私は、私は少しあなたのコードをクリーンアップする必要があると考えられてき:)

guard let data = data where statusCode == 200 else { 
    return 
} 

do{ 
    let json = try NSJSONSerialization.JSONObjectWithData(data, options:.AllowFragments) 

    if let ns = json as? NSArray{ 
     for ns in ns{ 
      if let name = ns["name"] as? String, number = ns["number"] as? Int, 
       cn = ns["cyclenumber"] as? Int, url = ns["url"] as? String{ 

        self.c.name = name 
        self.c.number = number 
        self.c.cycleNumber = cn 
        self.c.url = url 
        self.n.array.append(self.c) 
       } 
      } 
     } 

}catch { 
    print("Error with Json: \(error)") 
} 
+0

ありがとう! Swiftに近づくと、助けに感謝します。 – chrisz

+0

問題ありません。幸運を学ぶ! – PeejWeej