2016-02-28 3 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

Вместо того, чтобы ваш для цикла и кода внутри него, используйте:

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 теперь массив из ваших телефонных номеров.

Но, как сказал thefredelement, лучше подклассифицировать его, чтобы вы могли просто передать его в этот подкласс и напрямую получить доступ к номерам телефонов.

Смежные вопросы