2016-01-21 82 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,但由于otherEntityNSmanagedObject,我不能使用.count方法。有没有一种方法可以让我能够从NSmanagedObject中随机选取一个元素?如何从coredata中随机选择一个元素swift

回答

1

如果您正试图将随机指数走出对象的当前数量在DB比你应该使用results.countotherEntity.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

相关问题