我已向AppStore提交了包含数据库更改的应用更新。新版本对数据库进行了大量更改,
使用新名称
创建新数据库添加到捆绑,
通过编码删除旧数据库,
通过编码
将新数据库添加到文档目录
在调试版本中运行良好。
将应用程序提交到应用程序商店并更新应用程序后,我发现无法从数据库访问数据。所以我删除了应用程序并从应用程序商店安装了最新的应用程序(这应该有新的数据库),但这也无法正常工作。然后我发现数据库根本没有创建。
我不知道使用新数据库的应用程序商店版本中发生了什么。为什么数据库根本没有创建?
这个奇怪的问题可能是什么原因?
非常感谢任何帮助。请以您可能知道的任何理由发布您的答案。这可能有助于我解决或至少知道这个问题。
提前致谢。
代码
- (void)createEditableCopyOfDatabaseIfNeeded {
// First, test for existence.
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"app.sqlite"];
success = [fileManager fileExistsAtPath:writableDBPath];
if (success) return;
// The writable database does not exist, so copy the default to the appropriate location.
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"app.sqlite"];
success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
if (!success) {
NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}}
-(void)getPasswordFromDb
{
sqlite3_stmt *statement;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"app.sqlite"];
if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) {
const char *sql = "SELECT emailAddress,password from AccountInformation;";
if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {
cEmail = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)];
cPSW = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];
}
}
}
sqlite3_finalize(statement);
} else {
NSAssert1(0, @"Failed to open database with message '%s'.", sqlite3_errmsg(database));
}
}