2015-05-24 2 views
1

В моем приложении iOS - У меня есть что-то с именем где я устанавливаю приоритет для X, Y, Z; например: X = 30, Y = 60, Z = 80.Как получить существующие данные в coredata ENTITY перед запуском приложения

, которые имеют некоторое значениепо умолчанию (Х = 50, Y = 50 и Z = 50) для впервые и и ntill изменения пользователем это значение.

В основном пользователь может изменить приоритет N числа раз и всякий раз, когда он меняет, мне нужно только обновить значения по умолчанию с измененным значением.

Что мне нужно, чтобы сохранить измененное значение так, что, когда он журналы в следующий раз он должен видеть его измененные значения, а не значения по умолчанию.

+1

Нужно ли быть в основных данных? Почему не пользовательские настройки по умолчанию? – Wain

ответ

0

CoreData не предоставляет никаких возможностей для создания кортежей по умолчанию при настройке базы данных. SO, чтобы пользователь мог видеть некоторые значения по умолчанию, которые он может изменить в будущем, и видеть желаемое измененное значение при каждом входе в систему - ему нужно создать кортежи базы данных со значениями по умолчанию в нем. Это можно сделать с помощью 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 "); 

    } 
} 
2

NSUserDefaults - лучшее место для этого. Вы можете зарегистрировать значения по умолчанию, которые хотите получить при первом запуске, используя registerDefaults:. Если пользователь ничего не делает, у вас будут доступные вам значения, которые вы зарегистрировали. Если пользователь изменяет значение с одним из ключей, которые вы регистрируете, то эти новые значения будут получены, а не по умолчанию.

+0

NSUserDefaults для сохранения введенной информации, даже если вы «действительно» закрываете приложение. Это позволит сохранять данные через несколько сеансов. Но я хочу, чтобы мой объект CoreData ПРИОРИТЕТ (Priority_name, Percentage) имел 3 строки со значениями ниже по умолчанию. X, 30 Y, 60 Z, 80 –

+0

@SunilPanda Вы хотите, чтобы этот объект имел эти значения только до тех пор, пока пользователь не изменит его? Поэтому, если использование изменяет эти значения, закрывает приложение, а затем возвращается, вы хотите увидеть эти измененные значения или ваши значения по умолчанию? – rdelmar

+0

Я хочу иметь предварительно заполненные кортежи со значениями по умолчанию в нем .. на самом деле, я выяснил вчера вечером, поделится им здесь. –