如何设计对象图/模型? [英] How to design Object Graph/Model?

查看:72
本文介绍了如何设计对象图/模型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆