извлекать одноядерные элементы данных и объединять их в один массив - PullRequest
0 голосов
/ 13 января 2020

Мой быстрый код ниже сохраняет 3 имени в основных данных. Затем в шутке c он извлекает данные и преобразует их в массив. Проблема в области отладки, а не в перечислении трех имен, таких как [kim, Hailey, jessica]. Он перечисляет их в каждой строке, чтобы они не группировались в одном массиве. Поэтому я хочу, чтобы все 3 имени были такими, как [name1, name2, name3].

    import UIKit
import CoreData

class ViewController: UIViewController,UITextFieldDelegate {
@IBOutlet var labelName : UILabel!
@IBOutlet var enterT : UITextField!

let appDelegate = UIApplication.shared.delegate as! AppDelegate //Singlton instance
var context:NSManagedObjectContext!

override func viewDidLoad() {
    super.viewDidLoad()

    openDatabse()
    joke()

}
func joke() {

    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")

 do {
    let results = try context.fetch(fetchRequest)
     let  Locations = results as! [Users]

     for location in Locations {
        print("Array: ",location.username)


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

}

func openDatabse()
{
    context = appDelegate.persistentContainer.viewContext
    let entity = NSEntityDescription.entity(forEntityName: "Users", in: context)
    let newUser = NSManagedObject(entity: entity!, insertInto: context)
    let newUser2 = NSManagedObject(entity: entity!, insertInto: context)
    let newUser3 = NSManagedObject(entity: entity!, insertInto: context)
    saveData(UserDBObj: newUser, UserDBObj2: newUser2, UserDBObj3: newUser3)

}

func saveData(UserDBObj:NSManagedObject,UserDBObj2:NSManagedObject,UserDBObj3:NSManagedObject)
{
    UserDBObj.setValue("kim kardashian", forKey: "username")
    UserDBObj2.setValue("jessica biel", forKey: "username")
    UserDBObj3.setValue("Hailey Rienhart", forKey: "username")




    print("Storing Data..")
    do {
        try context.save()
    } catch {
        print("Storing data Failed")
    }

    fetchData()
}

func fetchData()
{
    print("Fetching Data..")
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
    request.returnsObjectsAsFaults = false
    do {
        let result = try context.fetch(request)
        for data in result as! [NSManagedObject] {
            let userName = data.value(forKey: "username") as! String

            print("User Name is : "+userName)
        }
    } catch {
        print("Fetching data Failed")
    }
}}

Ответы [ 3 ]

0 голосов
/ 13 января 2020

После извлечения данных возьмите один массив строк и добавьте ваше имя пользователя в этот массив. Для справки см. Ниже код

var nameArray = [String]()
for location in Locations {
         print("Array: ",location.username)
         nameArray.append(location.username)  
     }
0 голосов
/ 13 января 2020

Прежде всего используйте указанный c запрос на выборку для получения Users записей.

Если вам нужен массив строк ([String]) map записей с именами пользователей

func joke() {
    let fetchRequest = NSFetchRequest<Users>(entityName: "Users")
    do {
        let result = try context.fetch(fetchRequest)
        let nameArray = result.map{$0.username}
        print(nameArray)
    } catch {
       print("Could not fetch \(error) ")
    }
}

Но если вы хотите, чтобы одна строка отделялась запятой join, массив

let nameString = result.map{$0.username}.joined(separator: ", ")
print(nameString)
0 голосов
/ 13 января 2020

При извлечении данных из CoreData конвертируйте managed object в массив классов вашей модели.

Прикрепите код для вашей справки.

   do{
        if let userData = try managedContext?.fetch(fetchRequest) as? [Users]{
               // use this userData for your result and update ui accordingly    
       }

    }catch let error as NSError {
         print("Could not fetch. \(error), \(error.userInfo)")
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...