【问题标题】:UITextField does not get the text value of an ArrayUITextField 不获取数组的文本值
【发布时间】:2015-07-14 20:25:59
【问题描述】:

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

}

【问题讨论】:

  • 您能否发布您的 BookArray 实体的声明?我会写下这段代码有什么问题,但如果你提供声明,我会告诉你如何修复它:)

标签: arrays string swift uitextfield


【解决方案1】:

一行一行。

首先你创建一个获取请求:

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
}

然后打开 Core Data 模型,点击 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) 将 viewDidLoad 函数的展开部分更改为:

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

【讨论】:

  • 我尝试了你的建议,但没有成功。 BookArray 是核心数据上的一个实体
  • 您应该调用 bookArrayInstance.myFirstBook。这是您拥有的字符串属性。
  • 是的,但他在这里抱怨:let bookArrayInstance = bookArray[randomIndex] as! BookArray as Use of undeclared type "BookArray"
  • 所以你没有为你的 BookArray 定义一个类?
  • 你如何保存你的用户输入?你确实提到它有效
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
相关资源
最近更新 更多