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
}
}
我正在使用核心数据将用户输入保存在数组中。在此之前,代码可以完美运行,问题是获取该数组的某些元素并将 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
}
}