gpt4 book ai didi

swift - Restkit:外键关系的 stub

转载 作者:行者123 更新时间:2023-11-30 10:11:27 26 4
gpt4 key购买 nike

鉴于下面的两个 REST API 端点,我在理解如何映射用户和团队对象时遇到了严重的困难。我一直在阅读我能找到的所有内容,最接近的质量保证是这个RestKit: Creating stubs for foreign key relationships ,但我无法将其适应我的情况。

/用户

 {
"success": 1,
"users": [{
"success": 1,
"name": "Damjan",
"surname": "Mozetič",
"teams": [1, 2]
}]
}

/团队

 {
"success": 1,
"teams": [{
"id": 1,
"title": "Team name",
"user": 1
}]
}

User.swift

class User: NSManagedObject {
@NSManaged var userId: NSNumber
@NSManaged var firstName: String
@NSManaged var lastName: String

@NSManaged var teams: NSSet?

@NSManaged var teamFKIds: NSNumber? // FK
}

团队敏捷

class Team: NSManagedObject {
@NSManaged var teamId: NSNumber
@NSManaged var title: String

@NSManaged var user: User?
}

映射:

// User
let userMapping = RKEntityMapping(forEntityForName: "User", inManagedObjectStore: mos)
userMapping.identificationAttributes = ["userId"]
userMapping.addAttributeMappingsFromDictionary([
"id": "userId",
"name": "firstName",
"surname": "lastName",
"team": "teamName",
"teams": "teamFKIds"
])
objectManager.addResponseDescriptor(RKResponseDescriptor(mapping: userMapping, method: .GET, pathPattern: "users", keyPath: nil, statusCodes: RKStatusCodeIndexSetForClass(.Successful)))

// Team
let teamMapping = RKEntityMapping(forEntityForName: "Team", inManagedObjectStore: mos)
teamMapping.identificationAttributes = ["teamId"]
teamMapping.addAttributeMappingsFromDictionary([
"id": "teamId",
"title": "title"
])
objectManager.addResponseDescriptor(RKResponseDescriptor(mapping: teamMapping, method: .GET, pathPattern: "teams", keyPath: nil, statusCodes: RKStatusCodeIndexSetForClass(.Successful)))

userMapping.addConnectionForRelationship("teams", connectedBy: ["teamFKIds": "teamId"])

从我读到的内容来看,为 FK 创建 stub 是可行的方法,就像这样,尽管我知道我把它搞砸了一点:

let profileStubMapping = RKEntityMapping(forEntityForName: "Profile", inManagedObjectStore: mos)
userStubMapping.addPropertyMapping(RKAttributeMapping(fromKeyPath: nil, toKeyPath: "teamFKIds"))
userStubMapping.identificationAttributes = ["userId"]
objectManager.addResponseDescriptor(RKResponseDescriptor(mapping: userStubMapping, method: .Any, pathPattern: "teams", keyPath: "userId", statusCodes: RKStatusCodeIndexSetForClass(.Successful)))

有人可以帮我了解如何正确设置吗?

另外,还有一个问题。最终我的计划是将整个图检索到核心数据中。我该如何实现这一目标?只需调用“/users”和“/teams”的 getObjectsAtPath 即可完成这项工作吗?

最后,我计划让该东西离线工作并在上线时同步。有什么实现建议吗?

谢谢。

最佳答案

看起来您想要以下内容:

let userMapping = RKEntityMapping(forEntityForName: "User", inManagedObjectStore: mos)
userMapping.identificationAttributes = ["userId"]
userMapping.addAttributeMappingsFromDictionary([
"id": "userId",
"name": "firstName",
"surname": "lastName"
])

let teamStubMapping = RKEntityMapping(forEntityForName: "Team", inManagedObjectStore: mos)
teamStubMapping.addPropertyMapping(RKAttributeMapping(fromKeyPath: nil, toKeyPath: "teamId"))
teamStubMapping.identificationAttributes = ["teamId"]

userMapping.addRelationshipMapping(sourceKeyPath: "teams", mapping: teamStubMapping)

关于swift - Restkit:外键关系的 stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32776984/

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