проблемы с сохранением на постоянное хранилище iphone - PullRequest
0 голосов
/ 06 марта 2011

Я пишу приложение для iPhone;Мне нужно сохранить данные в постоянном хранилище, но у меня возникли проблемы ... Я создал объект в xcdatamodel, и у меня нет проблем с получением значения по умолчанию, установленного для моего атрибута.В моем тестировании я перебираю код несколько раз ниже и могу изменить этот атрибут (это целое число), пока приложение активно.Однако, когда я закрываю и снова открываю приложение, мое целое число (myInt) возвращается к значению по умолчанию, когда я ожидал, что оно будет последним значением, до которого я его обновил.Вот что я делаю:

NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext;
NSEntityDescription *myTestEntity = [NSEntityDescription
                                       entityForName:@"TestEntity"
                                       inManagedObjectContext:managedObjectContext];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

[fetchRequest setEntity:timeStampEntity];

NSError *error = nil;
NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
    // TODO: Handle the error
}
for (id oneObject in fetchedObjects)
{
    NSInteger myInt = [[oneObject valueForKey:@"myStoredInt"]intValue];
    myInt++;
    [oneObject setValue:[NSNumber numberWithInt: myInt] forKey:@"myStoredInt"];
    NSError *error = nil;
    if (![managedObjectContext save:&error]) {//TODO: Handle error      
    } 
}

[fetchRequest release];

Я надеялся, что строка:

if (![managedObjectContext save:&error])

выполнит работу и сохранит изменения в постоянном хранилище, но это не так!(Наличие этой строки внутри или вне цикла for не меняет результат) Что я делаю не так?

Большое спасибо за помощь!

1 Ответ

3 голосов
/ 06 марта 2011

Будет полезно, если вы покажете код делегата вашего приложения. Я предполагаю, что где-то вы сами сбрасываете данные. возможно в том методе, которым вы загружаете стартовые данные.

3 заметки на данный момент:

  1. вам не нужно размещать сохранение Метод внутри цикла. вам следует поместите его после всех изменений сделано и всего один раз.
  2. проверьте, есть ли у вас метод сохранения, вызванный в (если не добавлен их):

        - (void)applicationWillTerminate:(UIApplication*)application {
           [self saveContext];
         } 
    
        - (void)applicationDidEnterBackground:(UIApplication*)application {
         [self saveContext];
        }
    
  3. если это не поможет, попробуйте посмотреть, загружаете ли вы значения по умолчанию для каждого ланча приложения.

УДАЧИ

и добро пожаловать

EDIT

Эй, ты можешь сделать это -

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

    if (persistentStoreCoordinator_ != nil) {
        return persistentStoreCoordinator_;
    }

    NSURL *storeURL = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory]                                             stringByAppendingPathComponent: @"anyname.sqlite"]];

   //check if the store already exist?
    BOOL firstRun = NO; 
    if (![[NSFileManager defaultManager] fileExistsAtPath:[storeURL path] isDirectory:NULL]) {
        firstRun = YES;     
    }

    NSError *error = nil;
    persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }    

    if(firstRun){
        //add your default data here
    }
}
...