2016-09-05 3 views
0

が上書きされています。何が起こるかは、ユーザーが新しい連絡先を作成するのに役立つViewControllerに移動した後です。以前に追加された連絡先がリストから削除されます。私は調査を試みましたが、私が発見したのは、Arrayの新しいElement(またはContact)を作成した後で、何らかの理由で私のコードが古い連絡先を削除し、新しく作成した連絡先に置き換えます。興味深いのは、私のアプリ(新しいViewControllerに行く)の別のページに行くだけで、何らかの理由で私のアプリが新しく作成されたContactを連絡先リストから削除し、自分のTableViewを空にすることです。ここで新しい要素は、アレイが、それはアプリが実際に連絡先リストに新しい連絡先を追加するための時間が来るまでXcodeと、すべてが順調に走っていたのw /私は連絡先リストアプリの並べ替えを作成しています前のメンバーの迅速

は私のコーディングと私が試したの内訳です:

これは初期のViewController(私はテーブルビューを実装し、テーブルビュー内のセルに編成されている配列を作成しました)

です私のユーザーが新しい連絡先を作成し、どのように私は連絡先リストここ

classPickViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate { 



override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if Save.touchInside{ 
     var VC :ViewController = segue.destinationViewController as! ViewController 
     if VC.names.count >= 1 { 
      VC.names.insert(NameText, atIndex: (VC.names.count)+1) 
      VC.numbers.insert(PhoneText,atIndex: (VC.numbers.count)+1) 
     } 
     else{ 
      VC.names.insert(NameText, atIndex: (VC.names.count)+0) 
      VC.numbers.insert(PhoneText,atIndex: (VC.numbers.count)+0) 
     } 
} 
} 
@IBAction func SaveContact(sender: UIButton) { 
    performSegueWithIdentifier("SaveEm", sender: self)//this takes the usr to the Contact list 
} 

に新しい連絡先を追加しようとする場合は

class ViewController: UIViewController, UITableViewDataSource,UITableViewDelegate { 

@IBOutlet var TableView: UITableView! 

var names = [String]() 
var numbers = [String]() 
override func viewDidAppear(animated: Bool) { 
    TableView.reloadData() 
} 
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return names.count 
} 
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomCell 
    cell.Name.text = names[indexPath.row] 
    cell.PhoneNumber.text = numbers[indexPath.row] 
    cell.reloadInputViews() 
    return cell 
} 
} 

これは、アイブ氏は、に使用されるコードされていますテーブルビュー(UITableViewCellのファイル)

class CustomCell: UITableViewCell { 
    @IBOutlet var Name: UILabel! 
    @IBOutlet var PhoneNumber: UILabel! 
override func awakeFromNib() { 
    super.awakeFromNib() 
    // Initialization code 
} 

override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 

    // Configure the view for the selected state 
} 

} 
+1

を持つ構造体の保存でしょう、あなたのアプリがViewController-> classPickViewController->のViewControllerからナビゲートしているように見えますので、あなたは 'ViewController'の新しいインスタンスを持っています新しい空の配列から開始します。あなたは、表示された 'ViewController'に戻ることができるように、ゆるやかなセグを見てください。また、アプリケーションの実行間でデータを保持するには、Core Dataのようなものを使用する必要があります。また、2つの配列を持つのではなく、 "Contact"構造体の配列を格納する必要があります。 – Paulw11

+0

うわー...だから私はかなりの間違いをしたのですか?これは私の配列の上書き自体の問題も解決しますか? – CoolMAn

+1

はい。あなたの配列は上書きされません。新しい配列(空の配列)を作成してから、新しいオブジェクトを追加します。他の配列はまだメモリに置かれていますが、新しいView Controllerを「上に」プレビューしているため、アクセスできません – Paulw11

答えて

1

あなたのアプリはViewController-> classPickViewController-> ViewControllerからナビゲートしているので、新しい空の配列で始まるViewControllerという新しいインスタンスがあります。

あなたが提示ViewControllerに戻って移動できるように、アンワインドseguesになっているはずです。

また、あなたのアプリの実行間でデータを永続化するためにコアデータのようなものを使用する必要があります。

私は、「連絡先」の配列ではなく二つの配列

+0

完璧に動作します!あなたのご意見ありがとうございます、これは私の問題だったものです。 – CoolMAn

0

reloadInputViews()で、私の細胞を初期化し、あなたがcellForRowAtIndexPathに既にあるときやり過ぎです。それを削除し、reloaddataを適切に配置してください。必要に応じて、制御フローが終了したことを知ったときに再度入力します。 したがって、reloadInputViews()を削除し、代わりにcellviewRowAtIndexPathのtableviewcellの各ビューを再訪してください。

関連する問題