1

在我的 iOS 应用程序中 - 我有一些称为设置的东西,我在其中设置了 X 、 Y 、Z 的优先级;例如:X = 30,Y = 60,Z = 80。

第一次有一些默认值(X=50,Y=50 和 Z =50),直到用户将其更改为所需值。

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

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

4

2 回答 2

2

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

于 2015-05-24T15:43:29.620 回答
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 ");

    }
}
于 2015-05-25T06:44:31.740 回答