2015-12-02 4 views
0

Я новичок в быстрых и основных данных. Я пытаюсь показать два текстовых поля, как только вы нажмете «Сохранить», они перейдут к основным данным и будут помещены в виде таблицы. Я получил одно текстовое поле для работы, но мне нужно, чтобы и другое работало. Может ли кто-нибудь сказать мне, что я делаю неправильно ..CoreData with Swift

Я уже добавил оба атрибута в основные данные, один из которых является «именем», а другой - «описаниями».

Вот что у меня есть, на мой взгляд контроллер ..

Спасибо!

класс ViewController: UIViewController, UITableViewDataSource {

@IBOutlet weak var tableView: UITableView! 

var people = [NSManagedObject]() 

@IBAction func addName(sender: AnyObject) { 
    let alert = UIAlertController(title: "New Client", 
     message: "Add a new client", 
     preferredStyle: .Alert) 

    let saveAction = UIAlertAction(title: "Save", 
     style: .Default, 
     handler: { (action:UIAlertAction) -> Void in 

      let textField = alert.textFields!.first 
      self.saveName(textField!.text!) 

      let textF = alert.textFields!.first 
      self.saveName(textF!.text!) 
      self.tableView.reloadData() 
    }) 

    let cancelAction = UIAlertAction(title: "Cancel", 
     style: .Default) { (action: UIAlertAction) -> Void in 
    } 

    alert.addTextFieldWithConfigurationHandler { 
     (textField: UITextField) -> Void in 

     (textF: UITextField) -> Void in 
    } 


    alert.addAction(saveAction) 
    alert.addAction(cancelAction) 

    presentViewController(alert, 
     animated: true, 
     completion: nil) 
} 


override func viewDidLoad() { 
    super.viewDidLoad() 
    title = "\"Clients\"" 
    tableView.registerClass(UITableViewCell.self, 
     forCellReuseIdentifier: "Cell") 

} 

func tableView(tableView: UITableView, 
    numberOfRowsInSection section: Int) -> Int { 
     return people.count 
} 

func tableView(tableView: UITableView, 
    cellForRowAtIndexPath 
    indexPath: NSIndexPath) -> UITableViewCell { 

     let cell = 
     tableView.dequeueReusableCellWithIdentifier("Cell") 

     let person = people[indexPath.row] 

     cell!.textLabel!.text = 
      person.valueForKey("name") as? String 
      person.valueForKey("description") as? String 

     return cell! 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func saveName(name: String , descriptions: String) { 
    //1 
    let appDelegate = 
    UIApplication.sharedApplication().delegate as! AppDelegate 

    let managedContext = appDelegate.managedObjectContext 

    //2 
    let entity = NSEntityDescription.entityForName("Person", 
     inManagedObjectContext:managedContext) 

    let person = NSManagedObject(entity: entity!, 
     insertIntoManagedObjectContext: managedContext) 

    //3 
    person.setValue(name, forKey: "name") 
    person.setValue(descriptions, forKey: "description") 

    //4 
    do { 
     try managedContext.save() 
     //5 
     people.append(person) 
    } catch let error as NSError { 
     print("Could not save \(error), \(error.userInfo)") 
    } 
} 
override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    //1 
    let appDelegate = 
    UIApplication.sharedApplication().delegate as! AppDelegate 

    let managedContext = appDelegate.managedObjectContext 

    //2 
    let fetchRequest = NSFetchRequest(entityName: "Person") 


    //3 
    do { 
     let results = 
     try managedContext.executeFetchRequest(fetchRequest) 
     people = results as! [NSManagedObject] 
    } catch let error as NSError { 
     print("Could not fetch \(error), \(error.userInfo)") 
    } 
} 

}

ответ

0

, если вы хотите, чтобы отобразить имя и описание человека в том же текстовом поле клетки, вы должны указать его с +. В дополнение к этому, вы можете нормально назвать имя и описание человека непосредственно, как это:

person.name 
person.description 

Попробуйте это:

cell!.textLabel!.text = person.name + " " + person.description