栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

iPhone上的JSON和核心数据

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

iPhone上的JSON和核心数据

首先,选择一个要使用的JSON库,我个人喜欢TouchJSON,但那里的其他几个库也相当不错。尽管不是很困难,但复杂的部分是将托管对象转换为适合的结构以进行转换。我写这个真正的快,所以它可能有一个或两个错误:)

您调用的方法是:

- (NSString*)jsonStructureFromManagedObjects:(NSArray*)managedObjects;- (NSArray*)managedObjectsFromJSONStructure:(NSString*)json withManagedObjectContext:(NSManagedObjectContext*)moc;

并实现如下:

- (NSDictionary*)dataStructureFromManagedObject:(NSManagedObject*)managedObject{  NSDictionary *attributesByName = [[managedObject entity] attributesByName];  NSDictionary *relationshipsByName = [[managedObject entity] relationshipsByName];  NSMutableDictionary *valuesDictionary = [[managedObject dictionaryWithValuesForKeys:[attributesByName allKeys]] mutableCopy];  [valuesDictionary setObject:[[managedObject entity] name] forKey:@"ManagedObjectName"];  for (NSString *relationshipName in [relationshipsByName allKeys]) {    NSRelationshipDescription *description = [[[managedObject entity] relationshipsByName] objectForKey:relationshipName];    if (![description isToMany]) {      NSManagedObject *relationshipObject = [managedObject valueForKey:relationshipName];      [valuesDictionary setObject:[self dataStructureForManagedObject:relationshipObject] forKey:relationshipName];      continue;    }    NSSet *relationshipObjects = [managedObject objectForKey:relationshipName];    NSMutableArray *relationshipArray = [[NSMutableArray alloc] init];    for (NSManagedObject *relationshipObject in relationshipObjects) {      [relationshipArray addObject:[self dataStructureForManagedObject:relationshipObject]];    }    [valuesDictionary setObject:relationshipArray forKey:relationshipName];  }  return [valuesDictionary autorelease];}- (NSArray*)dataStructuresFromManagedObjects:(NSArray*)managedObjects{  NSMutableArray *dataArray = [[NSMutableArray alloc] init];  for (NSManagedObject *managedObject in managedObjects) {    [dataArray addObject:[self dataStructureForManagedObject:managedObject]];  }  return [dataArray autorelease];}- (NSString*)jsonStructureFromManagedObjects:(NSArray*)managedObjects{  NSArray *objectsArray = [self dataStructuresFromManagedObjects:managedObjects];  NSString *jsonString = [[CJSonSerializer serializer] serializeArray:objectsArray];  return jsonString;}- (NSManagedObject*)managedObjectFromStructure:(NSDictionary*)structureDictionary withManagedObjectContext:(NSManagedObjectContext*)moc{  NSString *objectName = [structureDictionary objectForKey:@"ManagedObjectName"];  NSManagedObject *managedObject = [NSEntityDescription insertNewObjectForEntityForName:objectName inManagedObjectContext:moc];  [managedObject setValuesForKeysWithDictionary:structureDictionary];  for (NSString *relationshipName in [[[managedObject entity] relationshipsByName] allKeys]) {    NSRelationshipDescription *description = [relationshipsByName objectForKey:relationshipName];    if (![description isToMany]) {      NSDictionary *childStructureDictionary = [structureDictionary objectForKey:relationshipName];      NSManagedObject *childObject = [self managedObjectFromStructure:childStructureDictionary withManagedObjectContext:moc];      [managedObject setObject:childObject forKey:relationshipName];      continue;    }    NSMutableSet *relationshipSet = [managedObject mutableSetForKey:relationshipName];    NSArray *relationshipArray = [structureDictionary objectForKey:relationshipName];    for (NSDictionary *childStructureDictionary in relationshipArray) {      NSManagedObject *childObject = [self managedObjectFromStructure:childStructureDictionary withManagedObjectContext:moc];      [relationshipSet addObject:childObject];    }  }  return managedObject;}- (NSArray*)managedObjectsFromJSONStructure:(NSString*)json withManagedObjectContext:(NSManagedObjectContext*)moc{  NSError *error = nil;  NSArray *structureArray = [[CJSonDeserializer deserializer] deserializeAsArray:json error:&error];  NSAssert2(error == nil, @"Failed to deserializen%@n%@", [error localizedDescription], json);  NSMutableArray *objectArray = [[NSMutableArray alloc] init];  for (NSDictionary *structureDictionary in structureArray) {    [objectArray addObject:[self managedObjectFromStructure:structureDictionary withManagedObjectContext:moc]];  }  return [objectArray autorelease];}

现在这是递归的,因此如果不小心,您可以轻松地转换整个持久性存储。观察您的关系,并确保它们仅“向下”进入对象树,以便仅获得要转换的对象。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/427529.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号