在我的iOS应用中 - 我有一个名为设置的东西,我设置X,Y,Z的优先级;例如:X = 30,Y = 60,Z = 80。
对于第一次有一些默认值(X = 50,Y = 50和Z = 50),而且 ntill用户更改它达到了预期的价值。
基本上用户可以更改优先级N次,每次更改时我只需要更新默认值并更改值。
我需要保存更改的值,以便当他下次登录时,他应该会看到更改的值而不是默认值。
答案 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 ");
}
}