我正在使用核心数据将用户输入保存到数组中。在这之前,代码工作得很好,问题是需要获取该数组的一些元素并将其作为文本放入uitextfield。代码没有错误,只是不能正常工作。

@IBOutlet weak var quoteTextField: UILabel!
@IBOutlet weak var addQuote: UIButton!
@IBOutlet weak var deleteQuote: UIButton!

var bookArray: Array<AnyObject> = []

override func viewDidLoad() {
super.viewDidLoad()

//Get the info on the CoreData
var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
var context:NSManagedObjectContext = appDel.managedObjectContext!
var request = NSFetchRequest(entityName: "BookArray")
request.returnsObjectsAsFaults = false
bookArray = context.executeFetchRequest(request, error: nil)!

if (bookArray.count != 0){
    var randomIndex = Int(arc4random_uniform(UInt32(bookArray.count)))
    quoteTextField.text = bookArray[randomIndex] as? String
   }
}

这是我保存用户输入的地方,它位于另一个视图控制器中:
 @IBAction func saveOnData(sender: AnyObject) {

    var quoteInputText = quoteInput.text

    var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
    var context:NSManagedObjectContext = appDel.managedObjectContext!

    var newQuote = NSEntityDescription.insertNewObjectForEntityForName("BookArray", inManagedObjectContext: context) as! NSManagedObject

    newQuote.setValue(quoteInputText, forKey: "myFirstBook")

    context.save(nil)

    println(newQuote)

}

最佳答案

一行接一行。
首先创建一个提取请求:

var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
var context:NSManagedObjectContext = appDel.managedObjectContext!
var request = NSFetchRequest(entityName: "BookArray")
request.returnsObjectsAsFaults = false

然后将提取请求的结果分配给名为bookArray的数组:
bookArray = context.executeFetchRequest(request, error: nil)!

函数executeFetchRequest返回[AnyObject]。在您的例子中,它将返回一个BookArray实体[BookArray]数组。
所以,当你打电话时:
bookArray[randomIndex]

您会得到一个BookArray的实例。当然,您的条件向下转换为String将始终失败;)
你要做的是:
1)将以下类添加到项目中:
import Foundation
import CoreData

@objc(BookArray)
class BookArray:NSManagedObject {
    @NSManaged var myFirstBook:String
}

然后打开核心数据模型,单击BookArray实体,并确保在属性检查器中将其类设置为BookArray:
2)通过这种实现,您可以将保存函数重写为:
 @IBAction func saveOnData(sender: AnyObject) {

    var quoteInputText = quoteInput.text

    var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
    var context:NSManagedObjectContext = appDel.managedObjectContext!

    var newQuote = NSEntityDescription.insertNewObjectForEntityForName("BookArray", inManagedObjectContext: context) as! BookArray

    newQuote.myFirstBook = quoteInputText

    context.save(nil)

    println(newQuote)

}

3)将函数的展开部分更改为:
if (bookArray.count != 0){
    var randomIndex = Int(arc4random_uniform(UInt32(bookArray.count)))
    let bookArrayInstance = bookArray[randomIndex] as! BookArray
    quoteTextField.text = bookArrayInstance.myFirstBook
   }
}

关于arrays - UITextField不获取数组的文本值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31416615/

10-11 10:48