gpt4 book ai didi

ios - 与 Core Data 和 RestKit 无关的关系

转载 作者:行者123 更新时间:2023-11-29 13:44:39 25 4
gpt4 key购买 nike

我一直在使用 RestKit (0.9.3) 在我的应用程序中填充一些核心数据。实体对象创建正确,但它们之间的关系没有创建。据我所知,我已根据以下内容正确设置:

  1. https://github.com/RestKit/RestKit/wiki/Object-mapping
  2. 示例文件夹中的 RKRelationshipMappingExample

所以,这是我从服务器返回的 JSON 示例:

{
"artist" : {
"artistId" : 123,
"artistName" : "The Artist",
"albums" : [
{
"albumPrice" : 12.99,
"albumId" : 456,
"trackCount" : 12,
"albumName" : "Album Title",
},
{
"albumPrice" : 10.99,
"albumId" : 789,
"trackCount" : 10,
"albumName" : "Another Album Title",
}
]
}
}

我正在使用 RestKit 填充以下两个托管对象:

@interface Artist : NSManagedObject
@property (nonatomic, retain) NSNumber * artistId;
@property (nonatomic, retain) NSString * artistName;
@property (nonatomic, retain) NSSet *albums;
@end
@interface Artist (CoreDataGeneratedAccessors)
- (void)addAlbumsObject:(Album *)value;
- (void)removeAlbumsObject:(Album *)value;
- (void)addAlbums:(NSSet *)values;
- (void)removeAlbums:(NSSet *)values;
@end

@interface Album : NSManagedObject
@property (nonatomic, retain) NSNumber * albumId;
@property (nonatomic, retain) NSString * albumName;
@property (nonatomic, retain) NSNumber * albumPrice;
@property (nonatomic, retain) NSNumber * trackCount;
@property (nonatomic, retain) NSManagedObject *artist;
@end

我已经使用 RestKit 设置了以下配置,目的是创建 3 个核心数据项:一位艺术家和两张专辑。艺术家实体具有“专辑”关系,应该是这两张专辑的一组。

// Initialize our RestKit singleton
RKClient *client = [RKClient clientWithBaseURL:API_URL];

// Initialize for Object mapping
RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:API_URL];
objectManager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:@"AppName.sqlite"];

// Configure ALBUM mapping
RKManagedObjectMapping* albumMapping = [RKManagedObjectMapping mappingForClass:[Album class]];
albumMapping.primaryKeyAttribute = @"albumId";
[albumMapping mapKeyPath:@"albumId" toAttribute:@"albumId"];
[albumMapping mapKeyPath:@"albumName" toAttribute:@"albumName"];
[albumMapping mapKeyPath:@"albumPrice" toAttribute:@"albumPrice"];
[albumMapping mapKeyPath:@"trackCount" toAttribute:@"trackCount"];

// Configure ARTIST mapping
RKManagedObjectMapping* artistMapping = [RKManagedObjectMapping mappingForClass:[Artist class]];
artistMapping.primaryKeyAttribute = @"artistId";
[artistMapping mapKeyPath:@"artistId" toAttribute:@"artistId"];
[artistMapping mapKeyPath:@"artistName" toAttribute:@"artistName"];
[artistMapping mapKeyPath:@"albums" toRelationship:@"albums" withMapping:albumMapping];

// Register mappings with the provider
[[RKObjectManager sharedManager].mappingProvider setMapping:albumMapping forKeyPath:@"albums"];
[[RKObjectManager sharedManager].mappingProvider setMapping:artistMapping forKeyPath:@"artist"];

然后在我的程序中加载数据:

RKObjectManager *objectManager = [RKObjectManager sharedManager];
[objectManager loadObjectsAtResourcePath:@"/artist/123/albums" delegate:self];

执行此操作后,我的核心数据存储中填充了三个对象(一位艺术家和两张专辑),但未创建它们之间的关系。

结果是我可以直接获取这个专辑列表,或者我可以直接获取艺术家。但是如果我尝试使用:artist.albums 结果是空的。

任何人都可以就我可能做错的地方或如何进一步解决此问题提出建议吗?

非常感谢。

编辑:更新 10/26

我只是使用这些相同的配置设置了一个小型示例项目,并且所有内容都已正确加载(即艺术家实体是根据与其专辑的关系创建的)。遗憾的是,这意味着问题出在我的大型项目中,而不是我之前在此处概述的内容中。话虽如此,我会继续努力并进行更新,所以如果有人对如何解决此问题或特别要查看的地方提出建议,我将不胜感激。

编辑:已解决

令人尴尬的是,问题只是我使用了错误的基本 url。我明天会发布完整的详细信息(以防对其他人有所帮助)。

最佳答案

嗯...我们有一个解决方案。我不好意思地说,问题只是我在我的主项目中使用了错误的基本 url。我对 API 的本地副本返回的 JSON 进行了一些更新,但基本 url 仍然指向在线 API 的副本。

我所做的更改是以这种方式格式化 JSON,而不是让“艺术家”和“专辑”成为 JSON 中的独立实体。

关于ios - 与 Core Data 和 RestKit 无关的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7910709/

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