iOS 核心数据:将获取请求的结果转换为数组

iOS Core Data: Convert result of fetch request to an array

我正在尝试将获取请求的结果放入一个数组中。我的代码:

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let managedContext = appDelegate.managedObjectContext
    let fetchRequest = NSFetchRequest(entityName: "CLIENTS")
    var mobClients = [NSManagedObject]()
    var arrayAllPhoneNumbers = [String]()

    do {
        let results = try managedContext.executeFetchRequest(fetchRequest)
        mobClients = results as! [NSManagedObject]

        for clientPhoneNumber in mobClients {

            let myClientPhoneNumber = clientPhoneNumber.valueForKey("clientsMobilePhoneNumber") as! String
            print(myClientPhoneNumber)
            //The numbers print out just fine, one below the other
            //
            //Now the results need to go into the array I've declared above ---> arrayAllPhoneNumbers

            messageVC.recipients = arrayAllPhoneNumbers // Optionally add some tel numbers

        }

    } catch
        let error as NSError {
            print("Could not fetch \(error), \(error.userInfo)")
    }

如图所示,需要将所有phone个数字都捕获到一个数组中。我该如何实现?

不要使用 for 循环和其中的代码,而是使用:

arrayAllPhoneNumbers = mobClients.map({ clientPhoneNumber in
    clientPhoneNumber.valueForKey("clientsMobilePhoneNumber") as! String
})
messageVC.recipients = arrayAllPhoneNumbers
let request = NSFetchRequest(entityName: "CLIENTS")
let results = (try? managedContext.executeFetchRequest(request)) as? [NSManagedObject] ?? []

let numbers = results.flatMap { [=10=].valueForKey("clientsMobilePhoneNumber" as? String }

numbers 现在是您的 phone 个数字的数组。

但是就像 thefredelement 所说的那样,最好将其子类化,这样您就可以将其转换为该子类并直接访问 phone 号码。

Swift 5 : flatMap 已弃用,使用 compactMap

let request = NSFetchRequest(entityName: "CLIENTS")
let results = (try? managedContext.executeFetchRequest(request)) as? [NSManagedObject] ?? []

let numbers = compactMap { [=10=].valueForKey("clientsMobilePhoneNumber" as? String }