gpt4 book ai didi

swift - 如何在具有一对多关系的核心数据实体中附加记录

转载 作者:行者123 更新时间:2023-11-28 07:35:38 25 4
gpt4 key购买 nike

我有两个实体 Mobile 和 User,其中 Mobile 具有属性名称,用户也具有名称属性。用户可以有多个手机,但手机只能有一个用户。场景是,每当我输入用户实体中已经存在的用户名称时,它应该更新该 user.mobile 集而不是复制新用户。这些是我的保存和获取功能

    func save () {
if context.hasChanges {
do {
try context.save()
print("saved succesfully")
} catch {
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}

func fetch<T: NSManagedObject>( _ objectType: T.Type) -> [T] {
let entityName = String(describing: objectType)
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: entityName)

do {
let fetchedObjects = try context.fetch(fetchRequest) as? [T]
return fetchedObjects ?? [T]()
} catch {
print(error)
return [T]()
}
}

这是我添加的方式

       users = persistenceManager.fetch(User.self)
if users.count > 1 {
for val in users {

if val.name == "Umar" {
val.addToDevice(device)
device.user = val
persistenceManager.save()
}
else if val.name != nil {
user.name = "Umar"
user.addToDevice(device)
device.user = user
persistenceManager.save()
}
}

最佳答案

您的问题缺少一些细节。但是让我假设我理解正确。

    let userName = "some name from user input"
let user = MOUser.getUser(context, name: userName, createIfMissing: true)
// here you have user with name required and not duplicated if already exists
device.user = user

并将静态函数添加到您的用户类或数据库协调器

    static func getUser(moc: NSMaagedObjectContext, name: String, createIfMissing: Bool) -> MOUser? {
let request: NSFetchRequest<MOUser> = MOUser.fetchRequest()
request.predicate = NSPredicate(format: "\(#keyPath(MOUser.name)) = %@", name)
request.fetchLimit = 1
var result: MOUser? = (try? moc.fetch(request))?.first

if result == nil && createIfMissing {
result = MOUser(context: moc)
result?.name = name
}
return result
}

关于swift - 如何在具有一对多关系的核心数据实体中附加记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53228335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com