Ios 核心数据初始化

Ios 核心数据初始化,ios,objective-c,xcode,core-data,Ios,Objective C,Xcode,Core Data,我是coredata的新手,所以我有一个非常基本的问题 我有Providers实体,在viewDidLoad的视图控制器中,我实现了以下方法: -(NSDictionary *) allProviders { Providers *orangeFR = [NSEntityDescription insertNewObjectForEntityForName:@"Providers" inManagedObjectContext:self.managedObjectContext];

我是coredata的新手,所以我有一个非常基本的问题 我有Providers实体,在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?

创建一个
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];
将提供者插入词典(我假设您的
提供者
实体上有
国家/地区
属性……它有吗?)

最后,制作
NSMutableDictionary
的不可变副本,并将其返回:

return providersByCountry.copy;

由于这可能是一个相当缓慢的操作,您可能希望将结果缓存在私有的
@属性中
——但无论何时修改提供程序列表,您都需要以某种方式清除缓存。

我知道我必须使用fetchrequest,但是如果使用
executeFetchRequest:
我将获得整个提供程序实体,如何以这种方式组织我的所有提供程序?注意:您的实体应该命名为
提供者
,而不是
提供者
。实体名称应该是单数,而不是复数。实体描述的是一种数据库记录类型,而不是数据库记录表。提供者的数据是否属于用户首次使用应用程序时仅加载一次的类型?从这个意义上说,你的应用程序需要正常运行吗?我的提供商实体中没有country属性,我只是在allProviders中手动使用国家/地区作为密钥dictionary@dav如果你想使用核心数据构建所有提供商,你必须在核心数据中存储国家。我必须在另一个实体中存储国家,还是可以在提供商中使用?我在tableview中使用国家/地区,因此我不需要多次显示它,我只需要将
国家/地区
属性作为字符串添加到现有的提供者实体中。这将适用于我在这里发布的代码。
NSArray* allProviders = [managedObjectContext executeFetchRequest:[[NSFetchRequest alloc] initWithEntityName:@"Providers"] error:nil];
NSArray* allProviders = [managedObjectContext executeFetchRequest:[[NSFetchRequest alloc] initWithEntityName:@"Providers"] error:nil];