0

由于下面给出了两个REST API端点,我很难理解如何映射用户和团队对象。我一直在阅读所有我能找到的,所以最接近的质量保证是这一个RestKit: Creating stubs for foreign key relationships,但我无法适应我的情况。Restkit:外键关系的存根

/用户

{ 
     "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"]) 

从我一直在读,对于FKS创建存根是要走的路,这样的事情,altough我知道我搞砸这up:

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))) 

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

另外,还有一个问题。最终,我的计划是将整个图形检索到Core Data中。我如何实现这一目标?只需为“/ users”和“/ teams”调用getObjectsAtPath来完成这项工作?

最后,我打算havnig的东西离线工作和同步上网时。有关实施它的任何提示?

谢谢。

+0

你总是让用户第一,然后团队?看来你只需要通过一个无关键路径映射的存根,就是这样... – Wain

+0

@是的,我确实让用户第一。你能告诉我如何通过零keypath设置存根吗?这是我难以理解的部分。 – Rhuantavan

回答

1

它看起来像你想的线沿线的东西:

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) 
+0

谢谢你的工作就像一个魅力。 – Rhuantavan