База данных sqlite не обновляет измененные данные в iphone SDK - PullRequest
0 голосов
/ 03 сентября 2010

Ну, я новичок в кодировании iphone и использую sqlite в одном из моих приложений, проблема в том, что моя база данных sqlite не обновляет измененные данные, я следую учебнику на основе sqlite:

вот что я делаю: -

- (void) saveAllData {

 if(isDirty) {


  if(updateStmt == nil) {
   const char *sql = "update Work Set Engagement = ?, Status = ?, Where WorkID = ?";
   if(sqlite3_prepare_v2(database, sql, -1, &updateStmt, NULL) != SQLITE_OK) 
    NSAssert1(0, @"Error while creating update statement. '%s'", sqlite3_errmsg(database));
  }

  sqlite3_bind_text(updateStmt, 1, [Engagement UTF8String], -1, SQLITE_TRANSIENT);
  sqlite3_bind_text(updateStmt, 2, [Status UTF8String], -1, SQLITE_TRANSIENT);
   //sqlite3_bind_double(updateStmt, 2, [Status doubleValue]);
  sqlite3_bind_int(updateStmt, 3, WorkID);
  //int Success = sqlit3_step(updateStmt);


  if(SQLITE_DONE != sqlite3_step(updateStmt))
   NSAssert1(0, @"Error while updating. '%s'", sqlite3_errmsg(database));

  sqlite3_finalize(updateStmt);

  isDirty = NO;
 }

Я использую:

- (IBAction) save_Clicked:(id)sender {


 //Update the value.
 //Invokes the set<key> method defined in the Work Class.
 [objectToEdit setValue:txtField.text forKey:self.keyOfTheFieldToEdit];
 [self.navigationController popViewControllerAnimated:YES];
}

для нажатия кнопки сохранения и:

- (void) setEngagement:(NSString *)newValue {

 self.isDirty = YES;
 [Engagement release];
 Engagement = [newValue copy];
}

- (void) setStatus:(NSString *)newNumber {

 self.isDirty = YES;
 [Status release];
 Status = [newNumber copy];
}

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

это код для моей реализации getDBPath

- (NSString *) getDBPath {

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
    NSString *documentsDir = [paths objectAtIndex:0];
    return [documentsDir stringByAppendingPathComponent:@"CheckList.sqlite"];
}

этот код для моей базы данных: - (void) copyDatabaseIfNeeded {

NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSString *dbPath = [self getDBPath];
BOOL success = [fileManager fileExistsAtPath:dbPath]; 

if(!success) {

    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"CheckList.sqlite"];
    success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];

    if (!success) 
        NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
    }   
}

1 Ответ

0 голосов
/ 03 сентября 2010

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

Путь к каталогу документов можно получить с помощью:

[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]

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