首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >核心数据初始化

核心数据初始化
EN

Stack Overflow用户
提问于 2014-06-20 21:32:21
回答 2查看 35关注 0票数 0

我对coredata很陌生,所以我有一个非常基本的问题--我有提供者实体,在viewDidLoad的控制器中,我实现了这个方法:

代码语言:javascript
复制
-(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了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-20 21:53:53

创建一个NSMutableDictionary

代码语言:javascript
复制
NSMutableDictionary *providersByCountry = [NSMutableDictionary dictionary]

获取所有实体:

代码语言:javascript
复制
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"Providers" inManagedObjectContext:self.managedObjectContext];

NSArray *providers = [self.managedObjectContext executeFetchRequest:request error:NULL];

将提供程序插入字典(我假设您的Providers实体上有一个Providers属性.有吗?):

代码语言:javascript
复制
for (Providers *provider in providers) {
    NSArray *providersForThisCountry = [providersByCountry[provider.country]
    if (!providersForThisCountry) {
        providersForThisCountry = [NSArray array];
    }

    providersForThisCountry = [providersForThisCountry arrayByAddingObject:provider];

    providersByCountry[provider.country] = providersForThisCountry;
}

最后,创建NSMutableDictionary的不可变副本,并返回它:

代码语言:javascript
复制
return providersByCountry.copy;

由于这可能是一个相当慢的操作,因此您可能希望在私有@property - but中缓存结果,因此无论何时修改提供程序列表,都需要清除缓存。

票数 0
EN

Stack Overflow用户

发布于 2014-06-20 21:55:21

代码语言:javascript
复制
NSArray* allProviders = [managedObjectContext executeFetchRequest:[[NSFetchRequest alloc] initWithEntityName:@"Providers"] error:nil];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24335967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档