查看特定属性的所有记录并查看最高值

时间:2017-03-27 10:14:54

标签: arrays swift core-data

好的,所以我有一个专为角色扮演而设计的应用。我有一个指南,引导用户创建角色。所以用户要做的第一件事就是输入字符编号。所以我希望它搜索我所谓的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)。

我是否在正确的过去?

1 个答案:

答案 0 :(得分:2)

使用unicode调整您的获取请求,而不是手动找到最高SortDescriptor

characterNumber