我正在使用核心数据将用户输入保存到数组中。在这之前,代码工作得很好,问题是需要获取该数组的一些元素并将其作为文本放入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/