我对coredata很陌生,所以我有一个非常基本的问题--我有提供者实体,在viewDidLoad的控制器中,我实现了这个方法:
-(NSDictionary *) allProviders {
Providers *orangeFR = [NSEntityDescription insertNewObjectForEntityForName:@"Providers" inManagedObjectContext:self.managedObjectContext];
orangeFR.name = [NSString stringWithFormat:@"Orange"];
orangeFR.adress = [NSString stringWithFormat:@"Champ De Mars"];
Providers *sfrFR = [NSEntityDescription insertNewObjectForEntityForName:@"Providers" inManagedObjectContext:self.managedObjectContext];
sfrFR.name = [NSString stringWithFormat:@"SFR"];
sfrFR.adress = [NSString stringWithFormat:@"SFR Adress"];
NSArray *FRProviders = @[orangeFR, sfrFR];
Providers *ATT = [NSEntityDescription insertNewObjectForEntityForName:@"Providers" inManagedObjectContext:self.managedObjectContext];
BeelineRU.name = [NSString stringWithFormat:@"ATT"];
BeelineRU.adress = [NSString stringWithFormat:@"ATT adress"];
Providers *Verizon = [NSEntityDescription insertNewObjectForEntityForName:@"Providers" inManagedObjectContext:self.managedObjectContext];
MTSRU.name = [NSString stringWithFormat:@"Verizon"];
MTSRU.adress = [NSString stringWithFormat:@"Verizon Adress"];
NSArray *USProviders = @[ATT, Verizon];
_allProviders = @{@"France": FRProviders, @"USA":USProviders};
return _allProviders;
}所以一切都很好,但是在应用程序的第二次启动时,我需要检查是否已经填充了我的提供者实体。如何做到这一点,这样我就可以在这两种情况下获得我的_allProviders了?
发布于 2014-06-20 21:53:53
创建一个NSMutableDictionary
NSMutableDictionary *providersByCountry = [NSMutableDictionary dictionary]获取所有实体:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"Providers" inManagedObjectContext:self.managedObjectContext];
NSArray *providers = [self.managedObjectContext executeFetchRequest:request error:NULL];将提供程序插入字典(我假设您的Providers实体上有一个Providers属性.有吗?):
for (Providers *provider in providers) {
NSArray *providersForThisCountry = [providersByCountry[provider.country]
if (!providersForThisCountry) {
providersForThisCountry = [NSArray array];
}
providersForThisCountry = [providersForThisCountry arrayByAddingObject:provider];
providersByCountry[provider.country] = providersForThisCountry;
}最后,创建NSMutableDictionary的不可变副本,并返回它:
return providersByCountry.copy;由于这可能是一个相当慢的操作,因此您可能希望在私有@property - but中缓存结果,因此无论何时修改提供程序列表,都需要清除缓存。
发布于 2014-06-20 21:55:21
NSArray* allProviders = [managedObjectContext executeFetchRequest:[[NSFetchRequest alloc] initWithEntityName:@"Providers"] error:nil];https://stackoverflow.com/questions/24335967
复制相似问题