如何制作一个对象并正确使用核心数据?

时间:2011-09-05 08:34:45

标签: xcode core-data object iphone-4

我有5000个地区和城市对。我想把这些5000区放入coredata。每个区都有一个城市,每个城市都有很多区。我有2个实体,即区和城市对。我该如何有效地做到这一点?

for (int i=0; i<[IndonesiaDistrictToSave count]; i++) {

    int index;
    for (int j=0; j<[[IndonesiaDistrictToSave objectAtIndex:i] length]; j++) {
        if([[IndonesiaDistrictToSave objectAtIndex:i] characterAtIndex:j]==','){
            index=j;
        }
    }

    NSString * DistrictName=[[IndonesiaDistrictToSave objectAtIndex:i] substringToIndex:index];
    NSString * CityName=[[IndonesiaDistrictToSave objectAtIndex:i] substringFromIndex:index+1];

    District * theDistrict = (District *)[GrabClass getObjectWithStringOfValue:DistrictName fromTable:@"District" withAttribut:@"Name"];
    theDistrict.City= (City *)[GrabClass getObjectWithStringOfValue:CityName fromTable:@"City" withAttribut:@"Name"];
}

getObjectWithStringOfValue是一个查找对象是否已经存在的方法,它将返回它,但是如果该对象不存在,它将创建一个新对象并返回它

然后我使用该代码保存所有印尼区,有超过4500个区,如果我使用时间间隔,我每个区得到0.013773但它仍然很慢,我怎样才能让它更快?

有没有办法获得搜索结果的可变阵列代理?

1 个答案:

答案 0 :(得分:1)

由于您似乎将您的实体视为sql表,我更怀疑您的提取是否有效设置。

核心数据不是SQL。实体不是表格。对象不是行。属性不是列。关系不是联接。核心数据是一个对象图管理系统,可能会或可能不会持久保存对象图,并且可能会或可能不会使用远远落后的SQL来执行此操作。试图用SQL术语来思考核心数据将导致你完全误解核心数据并导致更多的悲伤和浪费时间。

如果要查找一批潜在的属性值,请在谓词中使用IN运算符来查找所有匹配项,例如

NSArray *newName=[NSArray arrayWithObject:@"Tom",@"Dick",@"Harry",nil];
NSPredicate *p=[NSPredicate predicateWithFormat:@"name NOT IN %@",newName];

...然后将该谓词用于获取。返回的任何对象已在新数据中具有属性值,您可以跳过为它们创建新对象。