在我的 iOS 应用程序中 - 我有一些称为设置的东西,我在其中设置了 X 、 Y 、Z 的优先级;例如:X = 30,Y = 60,Z = 80。
第一次有一些默认值(X=50,Y=50 和 Z =50),直到用户将其更改为所需值。
基本上用户可以更改 N 次优先级,每当他更改时,我只需要使用更改的值更新默认值。
我需要的是保存更改的值,这样当他下次登录时,他应该看到他的更改值而不是默认值。
在我的 iOS 应用程序中 - 我有一些称为设置的东西,我在其中设置了 X 、 Y 、Z 的优先级;例如:X = 30,Y = 60,Z = 80。
第一次有一些默认值(X=50,Y=50 和 Z =50),直到用户将其更改为所需值。
基本上用户可以更改 N 次优先级,每当他更改时,我只需要使用更改的值更新默认值。
我需要的是保存更改的值,这样当他下次登录时,他应该看到他的更改值而不是默认值。
NSUserDefaults 将是一个更好的地方来做到这一点。您可以使用 : 注册您希望在初始启动时可用的默认值registerDefaults
。如果用户什么都不做,您将拥有您注册的可用值。如果用户使用您注册的键之一更改值,则将检索这些新值而不是默认值。
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 ");
}
}