如何设计对象图/模型? [英] How to design Object Graph/Model?
本文介绍了如何设计对象图/模型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
JSON As Dictionary
{
headers = (
{
backGroundImageUrl = "";
dataField = Name;
headerText = Name;
id = Name;
itemRenderer = "";
toolTip = "";
width = 60;
},
{
backGroundImageUrl = "";
dataField = BidPrice;
headerText = Bid;
id = BidPrice;
itemRenderer = "";
toolTip = "Bid Price";
width = 30;
});
values = (
{
assetCellValueLst = {
AskColorCode = "#B8D1ED";
AskPrice = "102.20";
BidColorCode = "#B8D1ED";
BidPrice = "102.00";
Name = "AR Bonar 11";
PECSAsk = 569;
PECSChg = "(31)";
PECSChgColorCode = "#000000";
PriceChg = "0.00";
PriceChgColorCode = "#000000";
SOLAsk = 604;
SSPAsk = 677;
SSPChgDay = "+3";
SSPChgDayColorCode = "#000000";
YTMAsk = "6.97";
assetGroupName = Argentina;
assetId = ARBONAR11;
iconPath = "images/flag_Argentina.gif";
updated = false;
};
assetId = ARBONAR11;
},
{
assetCellValueLst = {
AskColorCode = "#53840f";
AskPrice = "84.00";
BidColorCode = "#53840f";
BidPrice = "83.75";
Name = "AR Bod 15";
PECSAsk = 945;
PECSChg = 14;
PECSChgColorCode = "#000000";
PriceChg = "-0.10";
PriceChgColorCode = "#53840F";
SOLAsk = 985;
SSPAsk = 1007;
SSPChgDay = "+7";
SSPChgDayColorCode = "#000000";
YTMAsk = "11.74";
assetGroupName = Argentina;
assetId = ARBON15;
iconPath = "images/flag_Argentina.gif";
updated = false;
};
assetId = ARBON15;
});
为清楚起见,上述JSON具有更多的标头和值。根据业务逻辑,assestCellValueLst词典可以具有更多或更少的键值对。标头字典也是如此。我应该如何在Xcode中创建对象模型以将其与Core Data Managed Objects一起使用?对于非持久性存储或根本没有存储
The above JSON has more headers and values shortened here for clarity. The assestCellValueLst Dictionary can have more or less key-value pair depending on business logic. Same is true for headers dictionary. How should I create a Object Model in Xcode to use it with Core Data Managed Objects ? for a non - persistent store or no store at all
推荐答案
+(NSArray *)managedObjectsFromJSONDictionary:(NSDictionary *)dictionary withManagedObjectContext:(NSManagedObjectContext *)moc
{
NSMutableArray *finalArrayOfArrays = [[NSMutableArray alloc] init];
NSArray *allKeys = [dictionary allKeys];
for(NSString *keyName in allKeys)
{
id structureArray = [dictionary valueForKey:keyName];
if([structureArray isKindOfClass:[NSArray class]])
{
NSMutableArray *objectArray = [[NSMutableArray alloc] init];
for(NSDictionary *structureDictionary in (NSArray *)structureArray)
{
[objectArray addObject:[JSONtoManagedObject managedObjectFromDictionary:structureDictionary withManagedObjectContext:moc forEntity:keyName]];
}
[finalArrayOfArrays addObject:objectArray];
[objectArray release];
}
}
return [finalArrayOfArrays autorelease];
}
+(NSManagedObject *)managedObjectFromDictionary:(NSDictionary *)dictionary withManagedObjectContext:(NSManagedObjectContext *)moc forEntity:(NSString *)entityName
{
NSManagedObject *managedObject;
NSArray *arrayOfKeys = [dictionary allKeys];
for(NSString *name in arrayOfKeys)
{
id obj = [dictionary objectForKey:name];
managedObject = [NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:moc];
if (![obj isKindOfClass:[NSDictionary class]])
{
if([name isEqualToString:@"id"])
[managedObject setValue:obj forKey:@"uniqueID"];
else
[managedObject setValue:obj forKey:name];
}
else
{
NSDictionary *relationshipDictionary = [[managedObject entity] relationshipsByName];
for(NSString *relationshipName in [relationshipDictionary allKeys])
{
NSRelationshipDescription *relationshipDescription = [relationshipDictionary objectForKey:relationshipName];
if(![relationshipDescription isToMany] && [relationshipName isEqualToString:name])
{
NSManagedObject *childObject = [JSONtoManagedObject managedObjectFromDictionary:obj withManagedObjectContext:moc forEntity:relationshipName];
[managedObject setValue:childObject forKey:relationshipName];
continue;
}
NSMutableSet *relationshipSet = [managedObject mutableSetValueForKey:relationshipName];
NSArray *relationshipArray = [obj valueForKey:relationshipName];
for(NSDictionary *insideDictoinary in relationshipArray)
{
NSManagedObject *childObject = [JSONtoManagedObject managedObjectFromDictionary:insideDictoinary withManagedObjectContext:moc forEntity:relationshipName];
[relationshipSet addObject:childObject];
}
}
}//end else
} // for
return managedObject;
}
这篇关于如何设计对象图/模型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文