gpt4 book ai didi

ios - RestKit - 发布或放置包含嵌套实体的实体

转载 作者:行者123 更新时间:2023-11-29 02:58:16 25 4
gpt4 key购买 nike

我有一个 iOS 应用,它使用 RestKit 在我的 Core Data 模型和 Rails API 之间进行同步。

我的 Core Data 模型 中有 Game 和 Team 实体。游戏与团队之间存在一对多关系。我正在尝试更新 Teams 的“分数”属性,然后我试图通过在游戏中发送来在我的 RKObjectManager 上运行 putObject 方法。团队的分数不会在服务器上更新。

如果我更改游戏的属性,例如'状态',然后使用 putObject 发送到游戏中,它可以正常工作。

如果对象内部有嵌套对象,是否可以使用 putObject 更新多个对象?或者,当我更新其“分数”属性时,是否需要在团队上运行 putObject?

这是我的游戏映射代码。

Class itemClass = [Game class];
RKEntityMapping *mapping = [RKEntityMapping
mappingForEntityForName:@"Game"
inManagedObjectStore:managedObjectStore];

mapping.identificationAttributes = @[@"gameID"];

NSDictionary *standardDict = @{@"id": @"gameID",
@"created_at": @"createdAt",
@"updated_at": @"updatedAt"};

NSDictionary *gameDict = @{@"league_id": @"leagueID",
@"location_id": @"locationID",
@"state": @"state",
//.... more attributes....
};

[mapping addAttributeMappingsFromDictionary:standardDict];
[mapping addAttributeMappingsFromDictionary:gameDict];

[mapping addConnectionForRelationship:@"league" connectedBy:@{@"leagueID": @"leagueID"}];
[mapping addConnectionForRelationship:@"location" connectedBy:@{@"locationID": @"locationID"}];


NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful);
NSString *keyPath = nil;
NSString *itemsPath = @"games/:gameID";
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping
method:RKRequestMethodAny
pathPattern:itemsPath
keyPath:keyPath
statusCodes:statusCodes];

[manager addResponseDescriptor:responseDescriptor];

NSString *itemPath = @"game";
RKEntityMapping *requestMapping = [mapping inverseMapping];
RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping
objectClass:itemClass
rootKeyPath:itemPath
method:RKRequestMethodAny];
[manager addRequestDescriptor:requestDescriptor];

//route for manipulating with existing object
RKRoute *itemRoute = [RKRoute routeWithClass:itemClass pathPattern:@"games/:gameID" method:RKRequestMethodAny];
itemRoute.shouldEscapePath = YES;

[manager.router.routeSet addRoutes:@[itemRoute]];

团队的映射基本上以完全相同的方式编写,除了团队根据游戏的“游戏 ID”连接到游戏。所以 --> [mapping addConnectionForRelationship:@"game"connectedBy:@{@"gameID": @"gameID"}];

最佳答案

您在响应映射上使用外键映射:

[mapping addConnectionForRelationship:@"league" connectedBy:@{@"leagueID": @"leagueID"}];
[mapping addConnectionForRelationship:@"location" connectedBy:@{@"locationID": @"locationID"}];

并且当您使用 inverseMapping 时这些不会被反转(因为它们不包含足够的信息来创建反转)。

因此,您的 requestMapping 需要显式更新以包含关系映射,以告诉 RestKit 处理关系以及如何将关系内容映射到生成的 JSON 中。

关于ios - RestKit - 发布或放置包含嵌套实体的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23618278/

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