UITextField 没有获取数组的文本值

UITextField does not get the text value of an Array

我正在使用核心数据将用户输入保存在数组中。在此之前,代码可以完美运行,问题是获取该数组的某些元素并将 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 returns [AnyObject]。在您的情况下,它将 return 一个 BookArray 实体数组 [BookArray].

所以,当你打电话时:

bookArray[randomIndex]

你得到一个 BookArray 的实例。当然,你对 String 的条件转换总是会失败;)

这是你必须做的:

1) 将以下内容 class 添加到您的项目中:

import Foundation
import CoreData

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

然后打开您的 Core Data 模型,单击 BookArray 实体并确保在属性检查器中将其 class 设置为 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) 将 viewDidLoad 函数的展开部分更改为:

if (bookArray.count != 0){
    var randomIndex = Int(arc4random_uniform(UInt32(bookArray.count)))
    let bookArrayInstance = bookArray[randomIndex] as! BookArray
    quoteTextField.text = bookArrayInstance.myFirstBook
   }
}