2016-04-10 30 views
0

iOS'ta programlama yapmak için yeni olduğumu söyleyerek başlamak istiyorum, bu yüzden kötü bir soru olabileceğinden dolayı şimdiden özür dilerim. Bu yüzden benim hücrem için özel bir sınıf ile bir UITableView var. Bu hücrede, bir dizi Dizeyi ve bir Tamsayı dizisini temsil eden iki Etiketim var. CoreData söz konusu olduğunda tamamen kaybolacağım, ancak bazı kodları denedim ve işe yaramış gibi görünüyordu, sadece sorun tabloların farklı satırlarda görünebildiğiydi tabloView. Bu görüntüye bir göz atın ve umarız aşağıdakileri anlayabilirsiniz: My tableViewCoreData özel tabloyu kullanarak Swift

Ne istediğim "Godis" etiketi, "111" yazanla aynı satırda olacak. Orada neden "0" var diye bir fikrim yok, daha önce bahsettiğim tam sayı dizisine bile eklemedim. Bu benim (bu başka bir dosya ve sınıfta) düğmelerine basarak tableView öğe eklemek için kullanın koddur

class tableViewController: UITableViewController { 

var listItems = [NSManagedObject]() 

var prisItems = [NSManagedObject]() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 


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

    let managedContext = appDelegate.managedObjectContext 

    let fetchRequest = NSFetchRequest(entityName: "MinEntity") 

    do { 
     let results = try managedContext.executeFetchRequest(fetchRequest) 

     listItems = results as! [NSManagedObject] 
    } 
    catch { 
     print("error") 
    } 


    do { 
     let results = try managedContext.executeFetchRequest(fetchRequest) 

     prisItems = results as! [NSManagedObject] 
    } 
    catch { 
     print("error") 
    } 


} 

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

override func viewDidAppear(animated: Bool) { 
    tableView.reloadData() 
} 


override func viewWillAppear(animated: Bool) { 
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 

    let managedContext = appDelegate.managedObjectContext 

    let fetchRequest = NSFetchRequest(entityName: "MinEntity") 

    do { 
     let results = try managedContext.executeFetchRequest(fetchRequest) 

     listItems = results as! [NSManagedObject] 


    } 
    catch { 
     print("error") 
    } 


    do { 
     let results = try managedContext.executeFetchRequest(fetchRequest) 

     prisItems = results as! [NSManagedObject] 
    } 
    catch { 
     print("error") 
    } 



} 


override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return listItems.count 

} 



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

    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as? CDCell 




    cell!.itemListLabel.text = listItems[indexPath.row].valueForKey("item") as? String 



    cell?.prisListLabel.text = String(prisItems[indexPath.row].valueForKey("intItem")!) 


    return cell! 

} 

: Burada

tableView için sınıftır

@IBAction func addGodis(sender: AnyObject) { 

    saveItem("Godis", itemToSave2: 111) 
    print(listItems) 
    print(prisItems) 




} 


@IBAction func addMat(sender: AnyObject) { 
    saveItem("Mat", itemToSave2: 222) 
    print(listItems) 
    print(prisItems) 


} 



override func viewDidLoad() { 


} 



func saveItem(itemToSave : String, itemToSave2 : Int) { 

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

    let managedContext = appDelegate.managedObjectContext 

    let entity = NSEntityDescription.entityForName("MinEntity", inManagedObjectContext: managedContext) 

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

    item.setValue(itemToSave, forKey: "item") 

    do { 

     try managedContext.save() 

     listItems.insert(item, atIndex: 0) 
    } 
    catch{ 
     print("error") 
    } 


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

    item2.setValue(itemToSave2, forKey: "intItem") 

    do { 

     try managedContext.save() 

     prisItems.insert(item2, atIndex: 0) 

    } 

    catch { 
     print("error") 
    } 
} 

Ayrıca, UITableViewCell'im için özel bir sınıfım olduğunu da belirttim, ancak içinde yalnızca Etiketlerim için IBOutlet'leri var, böylece ek kod yok.

Gerçekten ne istediğimi daha net hale getirmek için: Bağladığım görüntüye bakarsanız, "Godis" ve "111" in aynı satırda olmadığını görürsünüz. Bunun yerine, orada bir neden olduğu hakkında hiçbir fikrim olmadığı bir 0 var. Öyleyse istediğim "Godis" ve "111" in aynı satırda TableView'a sahip olmak ve içinde bulunan "0" ı da kaldırmak. "0" ın orada olması bile gerekmiyor.

cevap

0

Çift satır alırsınız, çünkü bir yerine iki ekleme yaparsınız. İkincisini yapılandırmıyorsunuz, bu yüzden mantıklı olarak boş bir etiket ve bir tane de 0 ile gösteriliyor.

Göstermediğiniz kodda başka hatalar olabilir. Tablo görünümüne güç sağlamak için iki diziyi kullanmak her halükarda önerilmez.

İki diziyle değil, NSFetchedResultsController kullanıyor olmalısınız. Başlamak için Xcode template "Master-Detail" tarafından sağlanan kodlara bakın.

+0

Teşekkürler, ben NSFetchedResultsController hakkında daha sonra öğreneceğim! –