【发布时间】:2017-03-27 10:14:53
【问题描述】:
好的,所以我有一个专为角色扮演而设计的应用程序。我有一个指导用户创建角色的指南。所以用户要做的第一件事就是输入字符编号。所以我希望它搜索我称为characternumber 的属性的所有记录,并查看最大的数字是多少。
示例:假设我有 5 个字符。字符编号为 1,2,3,4,5。我想循环浏览所有记录并看到 5 是最大的数字,而不是自动在字符数文本字段中放置 6。
这是我目前所拥有的:
@IBOutlet var societyNumberTxt: UITextField!
@IBOutlet var characterNumberTxt: UITextField!
let managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
var characters: [NSManagedObject] = []
var societyNum: [NSManagedObject] = []
var charNum: [String] = []
override func viewDidLoad()
{
super.viewDidLoad()
//1
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
return
}
let managedContext = appDelegate.persistentContainer.viewContext
//2
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Characters")
//3
do {
societyNum = try managedContext.fetch(fetchRequest)
let entityDescription = NSEntityDescription.entity(forEntityName: "Characters", in: managedObjectContext)
let request: NSFetchRequest<Characters> = Characters.fetchRequest()
request.entity = entityDescription
var results = try managedObjectContext.fetch(request as! NSFetchRequest<NSFetchRequestResult>)
if societyNum.count > 0
{
let match = results[0] as! NSManagedObject
societyNumberTxt.text = (match.value(forKey: "societynumber") as? String)!
print(match)
if (match.value(forKey: "characternumber") != nil)
{
self.charNum = match.value(forKey: "characternumber") as! [String]
print(self.charNum)
}
else
{
print("empty array")
characterNumberTxt.text = "1"
}
}
else
{
societyNumberTxt.placeholder = "Society # not set"
}
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}
}
我不确定如何循环遍历每条记录并检查数组中的属性和位置。我尝试过这样的事情:
var i = 0
for i in results
{
var match = results[i] as? NSManagedObject
charNum[i] = match
}
我得到了错误:
不能使用“Any”类型的索引为“[Any]”类型的值下标
现在来测试我的 if 语句代码:
if (match.value(forKey: "characternumber") != nil)
{
self.charNum = match.value(forKey: "characternumber") as! [String]
print(self.charNum)
}
返回错误:
无法将“NSTaggedPointerString”(0x108578d10)类型的值转换为“NSArray”(0x108578dd8)。
我什至是正确的过去吗?
【问题讨论】: