2016-01-21 3 views
1
import UIKit 
import CoreData 

class Period1Controller: UIViewController, UITextFieldDelegate { 


@IBOutlet weak var enterName: UITextField! 
@IBOutlet weak var presentName: UITextView! 
@IBOutlet weak var independceStatue: UITextField! 
@IBOutlet weak var driverSelection: UITextField! 


var entitys = [NSManagedObject]() 
var nameList : [String] = [] 
var period1 = "" 
var period1NameList = "" 

override func viewDidLoad() { 
    super.viewDidLoad() 

} 


func setValues() { 
    nameList = [enterName.text!] 
} 

//this button is for saving the element into the core data 
@IBAction func setName(sender: UIButton) { 
    setValues() 
    for item in nameList{ 
     period1 += (item + " ") 
     period1NameList += item 
    } 
    let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 
    let entity = NSEntityDescription.entityForName("Entity", inManagedObjectContext: context) 
    let otherEntity = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: context) 
    otherEntity.setValue(period1NameList, forKey: "period1Core") 
    do { 
     try context.save() 
     print("Item Saved") 
    } catch { 
     print("Saved Failed") 
    } 
    presentName.text = period1 
    enterName.text = "" 
} 

// this button is for taking out element from core data and randomly pick a value from the element I took out from core data 
@IBAction func start(sender: UIButton) { 
    setValues() 
    let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 
    let request = NSFetchRequest(entityName: "Entity") 
    do { 
     let results = try context.executeFetchRequest(request) 
     entitys = results as! [NSManagedObject] 
    } catch let error as NSError { 
     print("Could not fetch \(error), \(error.userInfo)") 
    } 
    let otherEntity = entitys.last 
    let randomIndex = Int(arc4random_uniform(UInt32(otherEntity.count))) 
    driverSelection.text! = nameList[randomIndex] 

} 

} 

То, что я пытаюсь сделать, - это случайным образом выбрать элемент из моих основных данных и установить его равным текстовому полю driverSelection. В моем коде я установил элемент в моей coredata = otherEntity. Это сделано otherEntity a NSmanagedObject, но так как otherEntity является NSmanagedObject, я не могу использовать метод .count. Есть ли способ, который может сделать меня способным случайным образом выбрать элемент из NSmanagedObject ???Как случайно выбрать элемент из coredata swift

ответ

1

Если вы пытаетесь вытащить случайный индекс из текущего количества объектов в БД, чем вы должны использовать results.count не otherEntity.count как так:

@IBAction func start(sender: UIButton) { 
     setValues() 
     let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 
     let request = NSFetchRequest(entityName: "Entity") 
     var results = [AnyObject]() 

     do { 
      results = try context.executeFetchRequest(request) 

     } catch let error as NSError { 
      print("Could not fetch \(error), \(error.userInfo)") 
     } 
     let randomIndex = Int(arc4random_uniform(UInt32(results.count))) 
     driverSelection.text! = nameList[randomIndex] 

    } 
+0

он не работает. Он возвращает мне ошибку, в которой говорится: «Невозможно присвоить значение типа« [AnyObject] »для ввода« [NSManagedObject] » – 123558

+0

правильно извините, что результат должен быть типа [AnyObject] вместо [NSManagedObject], я исправил его. – null

+0

спасибо для поддержки. – 123558

Смежные вопросы