coredata импортирует sqlite, но не сохраняет новые данные Ошибка какао 256 - PullRequest
0 голосов
/ 17 февраля 2011

РЕДАКТИРОВАТЬ, // ПРИЧИНА НЕ СОХРАНЕНИЯ>

поэтому я добавил nslog в свой saveData (пожалуйста, проверьте код ниже), после сохранения отредактированных и сохраненных новых данных, для отредактированных, отлично но за новое ,, я получаю>

Error The operation couldn’t be completed. (Cocoa error 256.)

** Второе редактирование> если я редактирую и сохраняю первый раз, он прекрасно сохраняет отредактированные данные, но показывает ошибку 256 для новых данных,

но если я пытаюсь сохранить отредактированные данные после ошибки 256 (пытаясь сохранить новые данные), то при сохранении отредактированные данные показывают ошибку 256 и не сохраняются !!!!

Я импортирую некоторый sqlitedb (тот же, что генерирует coredata, но с некоторыми предварительно заполненными таблицами)

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    if (persistentStoreCoordinator_ != nil) {
        return persistentStoreCoordinator_;
    }
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,   NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *writableDBPath = [documentsDirectory   stringByAppendingPathComponent:@"ChildCare_v02.sqlite"];

    NSString *storePath = [[NSBundle mainBundle] pathForResource:@"ChildCare_v02"   ofType:@"sqlite"];

    NSURL *storeURL = [[self applicationDocumentsDirectory]  URLByAppendingPathComponent:@"ChildCare_v02.sqlite"]; //este es el que sirve!!! CREE ESTE

    NSLog(@"store URL %@", storeURL);

    // Put down default db if it doesn't already exist
    NSFileManager *fileManager = [NSFileManager defaultManager];
     if (![fileManager fileExistsAtPath:writableDBPath]) {
        NSLog(@"proceda aqui");
        NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"ChildCare_v02"   ofType:@"sqlite"];
        NSLog(@"no existe todavia");
        NSLog(@"defalultStorePath %@", defaultStorePath);

        if (defaultStorePath) {
            [fileManager copyItemAtPath:defaultStorePath toPath:writableDBPath error:NULL];
            NSLog(@"storePath= %@", storePath);
        }
    }    

    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();
    }    
    return persistentStoreCoordinator_;
}

он создает новый штраф в базе данных и заполняет его существующими данными, когда я редактирую данные (предварительно заполненные) в приложении, он сохраняет эти данные (проверяется в документе симулятора с помощью диспетчера sqlite и выходит и снова ), но если я создаю новую запись, она отображается в таблице, показывающей данные, но когда я покидаю приложение и возвращаюсь, этой новой созданной записи нет (и, конечно, нет в sqlite new db) .. .

это код, который я использую для сохранения отредактированных или вновь созданных данных,

-(IBAction)saveData
{
    if(editFlag==1)
    {
        NSManagedObjectContext *context = [(ChildCare_v01AppDelegate  *)[[UIApplication sharedApplication] delegate] managedObjectContext];

        NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
        NSEntityDescription *entity = [NSEntityDescription  entityForName:@"Employee" inManagedObjectContext:context];
        [request setEntity:entity];

        editEmp.namemployee = tfName.text;
        editEmp.surname = tfSurname.text;
        editEmp.email = tfEmail.text;
        //editEmp.phone = tfPhone.text;
        editEmp.mobile = tfMobile.text;

        editEmp.category=tfCategory.text;

        NSLog(@"salvado editado"); //saving FINE!!!!        

        NSError *error;
        if (![context save:&error])
        { NSLog(@"Error %@",[error localizedDescription]); } 
        //[context release];

        [self.navigationController popViewControllerAnimated:TRUE];

    }
    else{
        NSManagedObjectContext *context = [(ChildCare_v01AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
        Employee *employee = (Employee*)[NSEntityDescription
                                         insertNewObjectForEntityForName:@"Employee" 
                                         inManagedObjectContext:context];
        employee.namemployee = tfName.text;
        employee.surname = tfSurname.text;
        employee.email = tfEmail.text;
        //employee.phone=tfPhone.text;
        employee.mobile = tfMobile.text;    
        employee.category=tfCategory.text;

        NSLog(@"salvado nuevo"); ///HERE THE ERROR!! COCOA ERROR 256!!!!    

        NSError *error;
        if (![context save:&error]) {
            NSLog(@"Error %@",[error localizedDescription]);
            // handle error
        } else {
            NSLog(@"Done");
        }
        [self.navigationController popViewControllerAnimated:TRUE];

    }
}
  • так можно ли сохранить вновь созданные данные ?? почему не работает? почему только сохраняет изменения? и никаких новых данных? Пожалуйста, помогите мне достичь этого, большое спасибо!

1 Ответ

0 голосов
/ 17 февраля 2011

Несколько вещей, чтобы попробовать: 1. Перед сохранением убедитесь, что значение параметра managedObjectContext имеет ненулевое значение. 2. Ваш код инициализации БД переустанавливает исходный БД (тем самым теряя ваши изменения)? Удачи.

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