ios - 将数组保存到核心数据

标签 ios swift core-data

我创建了两个数组(imgUrl 和 imgTitle)。我想将这些数组值保存在核心数据中。我试过如下。然而,它并没有成功。

//Mark:- Method to save data in local data base(CoreData)
func saveDataInLocal(imageUrl: [String], imageTitle: [String]){
    let context = CoreDataStack.sharedInstance.persistentContainer.viewContext
    let contactEntity = NSEntityDescription.entity(forEntityName: "Photos", in: context)
    let newContact = NSManagedObject(entity: contactEntity!, insertInto: context)
    for eachValue in imageTitle{
        newContact.setValue(eachValue, forKey: "imgTitle")
    }
    for eachValue in imageUrl{
        newContact.setValue(eachValue, forKey: "imgUrl")
    }

    do {
        try context.save()
        fetchData()

    } catch {
        print("Failed saving")
    }
}

XcmodelID 如图所示。

enter image description here

在这两个数组中,一个是图像标题,另一个是图像 URL。 获取我正在做的事情如下。

//Mark:- Method to fetch data from local database(CoreData)
func fetchData(){
    let context = CoreDataStack.sharedInstance.persistentContainer.viewContext
    let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Photos")
    request.returnsObjectsAsFaults = false
    do {
        let result = try context.fetch(request)
        for data in result as! [NSManagedObject] {
            imgTitleNew.append(data.value(forKey: "imgTitle") as! String)
            imgUrlNew.append(data.value(forKey: "imgUrl") as! String)
        }
    } catch {
        print("Failed")
    }

    DispatchQueue.main.async {
        self.myCollectionView.reloadData()
    }
}

有人可以建议如何在 Core Data 中保存数组吗?

下方显示数组数据。

var imgUrl = [String]() //contains urls in array
var imgTitle = [String]() //contains titles in array

最佳答案

一个简单的解决方案是保存两个由制表符(或其他唯一)字符连接的数组,并使用计算属性进行转换

假设核心数据属性声明为

@NSManaged public var imageURL: String
@NSManaged public var imageTitle: String

添加这两个计算属性

var imageURLArray : [String] {
    get { return imageURL.components(separatedBy: "\t") }
    set { imageURL = newValue.joined(separator: "\t") }
}

var imageTitleArray : [String] {
    get { return imageTitle.components(separatedBy: "\t") }
    set { imageTitle = newValue.joined(separator: "\t") }
}

关于ios - 将数组保存到核心数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53737248/

相关文章:

ios - 我可以从其他应用程序将轨道添加到 iPhone 的音乐播放器吗?

iphone - transitionFromView 动画开始回调 :toView:duration

ios - CFNetwork SSLHandshake 失败 (-9806) & (-9800) & (-9830)

ios - swift if-let 不会打开可选的 NSDictionary

ios - UITabBar 项目在 iOS 12.1 上跳回后退导航

cocoa - 将表示一对多关系的 NSSet 绑定(bind)到 NSArrayController 的选择

ios - Core-Data NSFetchedResultsController 对多关系

ios - 在没有开发者注册的情况下转移应用程序?

swift - SpriteKit : how to find the position at which two sprites or physics bodies contact

mysql - 将 MySQL 模式作为 CoreData 数据模型导入 Xcode