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.
Teşekkürler, ben NSFetchedResultsController hakkında daha sonra öğreneceğim! –