2016-02-28 54 views
1

我试图将一个获取请求的结果放入数组中。我的代码:iOS核心数据:将获取请求的结果转换为数组

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)") 
    } 

如图所示,所有电话号码都需要在数组中捕获。我如何实现这一目标?

+0

创建表示核心数据实体的NSManagedObject子类可以更好地服务您。此外,如果您只需要电话号码,则应在初始提取中使用谓词,然后可以直接将结果数组分配给电话号码。 –

+0

对于像我这样的n00b,这是很多(压倒性的)信息!给我一两天谷歌所有的,如果你不介意,我想回到你这个。同时感谢您的回应! –

回答

2

而不是你的for循环和它里面的代码,使用:

arrayAllPhoneNumbers = mobClients.map({ clientPhoneNumber in 
    clientPhoneNumber.valueForKey("clientsMobilePhoneNumber") as! String 
}) 
messageVC.recipients = arrayAllPhoneNumbers 
+1

工程就像一个魅力!非常感谢你! –

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

let numbers = results.flatMap { $0.valueForKey("clientsMobilePhoneNumber" as? String } 

numbers现在是你的电话号码数组。

但是就像fredelement说的那样,最好将它继承下来,这样你就可以将它转换为该子类并直接访问电话号码。