我从Web服务获取JSON数据并尝试将其存储在带有Magical Record的Core Data中。我阅读了Saul Mora的精彩帖子(并且只有文档?)“Importing data made easy”,但我仍然不明白我需要做什么来获取我的实体中的所有数据。
以下是Web服务返回的JSON:
{
"ApiVersion": 4,
"AvailableFileSystemLibraries": [
{
"Id": 10,
"Name": "Movie Shares",
"Version": "0.5.4.0"
},
{
"Id": 11,
"Name": "Picture Shares",
"Version": "0.5.4.0"
},
{
"Id": 5,
"Name": "Shares",
"Version": "0.5.4.0"
},
{
"Id": 9,
"Name": "Music Shares",
"Version": "0.5.4.0"
}
],
"AvailableMovieLibraries": [
{
"Id": 3,
"Name": "Moving Pictures",
"Version": "0.5.4.0"
},
{
"Id": 7,
"Name": "MyVideo",
"Version": "0.5.4.0"
}
],
"AvailableMusicLibraries": [
{
"Id": 4,
"Name": "MyMusic",
"Version": "0.5.4.0"
}
],
"AvailablePictureLibraries": [
{
"Id": 8,
"Name": "Picture Shares",
"Version": "0.5.4.0"
}
],
"AvailableTvShowLibraries": [
{
"Id": 6,
"Name": "MP-TVSeries",
"Version": "0.5.4.0"
}
],
"DefaultFileSystemLibrary": 5,
"DefaultMovieLibrary": 3,
"DefaultMusicLibrary": 4,
"DefaultPictureLibrary": 0,
"DefaultTvShowLibrary": 6,
"ServiceVersion": "0.5.4"
}
我想要存储数据的实体如下所示:
还有一个Server
实体与ServerInfo
的关系为1:1。
我想做什么:
BackendLibrary
(来自ServerInfo
的1:n关系)的AvailableXYLibraries中。
type
,例如AvailableMovieLibraries的“movie”。defaultLibrary
引用此库,则将DefaultXYLibrary
设置为true。providerId
设置为servername + LibraryId,因为有多个服务器可以使用具有相同数字ID的BackendLibraries。魔法记录可以实现吗?我想我需要实现一些导入钩子并设置一些用户信息键,但我读到的所有内容并没有真正告诉我在哪里设置用户信息键或在哪里以及如何实现哪种方法。
我希望这是有道理的,你可以给我一些提示:)谢谢!
答案 0 :(得分:0)
此数据的结构与您的Core Data模型有很大不同。你最有可能要做的是在字典上迭代一下。也就是说,存在各种库数据集合,例如。 FileSystemLibraries,AvailableMovieLibraries等。您必须从这些键中获取数组,然后按照文章中的描述映射您的实体。要启动此流程,您必须致电
[BackendLibrary importFromArray:arrayFromDownloadedDictionary];
其中arrayFromDownloadedDictionary是您发布的示例字典中的每个数组。一旦你将数组提供给MagicalRecord,并提供了正确的字段映射,MagicalRecord就会在那时为你导入并创建所有实体。
确保将“Id”映射到BackendLibary.id,将“Name”映射到BackendLibrary.name,将“Version”映射到BackendLibrary.version