如何在应用启动之前在coredata ENTITY中拥有现有数据

时间:2015-05-24 15:27:27

标签: ios core-data settings default-database

在我的iOS应用中 - 我有一个名为设置的东西,我设置X,Y,Z的优先级;例如:X = 30,Y = 60,Z = 80。

对于第一次有一些默认值(X = 50,Y = 50和Z = 50),而且 ntill用户更改它达到了预期的价值。

基本上用户可以更改优先级N次,每次更改时我只需要更新默认值并更改值。

我需要保存更改的值,以便当他下次登录时,他应该会看到更改的值而不是默认值

2 个答案:

答案 0 :(得分:2)

NSUserDefaults是一个更好的地方。您可以使用registerDefaults:在初始启动时注册要使用的默认值。如果用户什么都不做,您将拥有您注册的值。如果用户使用您注册的其中一个键更改了值,则将检索这些新值而不是默认值。

答案 1 :(得分:0)

在设置数据库时,CoreData不提供任何创建默认元组的工具。因此,用户可以看到一些默认值,他可以在将来更改状态并在登录时查看所需的更改值 - 他需要创建其中包含默认值的数据库元组。 这可以通过使用NSPredicate检查元组中是否有条目然后在结果计数为0时创建它来完成。 下面我正在检查我的数据库中是否存在X,否则我会创建所有默认元组,因为有一个检查,它将在整个应用程序生命周期中只调用一次。

-(void) viewDidAppear:(BOOL)animated
{
    //fetch priority levels
    [self setDefaultPriorityLevel];

}

-(void)setDefaultPriorityLevel{
    //Do the database setup to default values if the user is logged in first time
    AppDelegate * appDelegate = [[UIApplication sharedApplication] delegate];
    NSManagedObjectContext * context = [appDelegate managedObjectContext];
    NSEntityDescription * entityDesc = [NSEntityDescription entityForName:@"ENTITY_NAME" inManagedObjectContext:context];

    NSFetchRequest * requestDefault = [[NSFetchRequest alloc]init];
    [requestDefault setEntity:entityDesc];

    //just check with anyone no need to check with each relation name
    NSPredicate * predDefault = [NSPredicate predicateWithFormat:@"(relation_name = %@)",@"X"];
    [requestDefault setPredicate:predDefault];

    NSError *error;
    NSArray *objectsForDefault = [context executeFetchRequest:requestDefault error:&error];

    if ([objectsForDefault count] == 0) {
        //no matches create and add the three objects - X, Y, Z (default tuples)
        NSLog(@"No Matches");
        //insert X level
        NSManagedObject *defaultFamilyLevel;
        defaultFamilyLevel = [NSEntityDescription insertNewObjectForEntityForName:@"ENTITY_NAME" inManagedObjectContext:context];
        [defaultFamilyLevel setValue:@"X" forKey:@"relation_name"];
        [defaultFamilyLevel setValue:@"30" forKey:@"relation_priority"];

        //insert Y level
        NSManagedObject *defaultLoveLevel;
        defaultLoveLevel = [NSEntityDescription insertNewObjectForEntityForName:@"ENTITY_NAME" inManagedObjectContext:context];
        [defaultLoveLevel setValue:@"Y" forKey:@"relation_name"];
        [defaultLoveLevel setValue:@"80" forKey:@"relation_priority"];

        //insert Z level
        NSManagedObject *defaultFriendLevel;
        defaultFriendLevel = [NSEntityDescription insertNewObjectForEntityForName:@"ENTITY_NAME" inManagedObjectContext:context];
        [defaultFriendLevel setValue:@"Z" forKey:@"relation_name"];
        [defaultFriendLevel setValue:@"50" forKey:@"relation_priority"];

        [context save:&error];
        NSLog(@"database is created ");

    }
}