Objective c 应用程序未创建sqlite数据库
由于某些原因,我的应用程序似乎没有在Documents文件夹中创建数据库。我一直在关注这个视频教程()(它还有我下载的源代码(),它在模拟器上运行得非常完美) 我使用了一些NSLog语句试图找出问题所在。我意识到,虽然“声明”语句之前的所有代码都运行正常,但其余的NSLog语句没有显示在控制台中。我不知疲倦地在我编写的代码和教程中的代码之间来回寻找,但没有找到解决方案 这是代码Objective c 应用程序未创建sqlite数据库,objective-c,sqlite,ios6.1,Objective C,Sqlite,Ios6.1,由于某些原因,我的应用程序似乎没有在Documents文件夹中创建数据库。我一直在关注这个视频教程()(它还有我下载的源代码(),它在模拟器上运行得非常完美) 我使用了一些NSLog语句试图找出问题所在。我意识到,虽然“声明”语句之前的所有代码都运行正常,但其余的NSLog语句没有显示在控制台中。我不知疲倦地在我编写的代码和教程中的代码之间来回寻找,但没有找到解决方案 这是代码 @interface ViewController () { NSMutableArray *letterArray
@interface ViewController () {
NSMutableArray *letterArray;
sqlite3 *letterDB;
NSString *dbPathString;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Set up
letterArray = [[NSMutableArray alloc]init];
[[self letterList] setDelegate:self];
[[self letterList] setDataSource:self];
// create or open database
[self createOpenDB];
// Display database
[self displayDB];
}
// Create/open database
- (void) createOpenDB {
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
NSString *docPath = [path objectAtIndex:0];
dbPathString = [docPath stringByAppendingPathComponent:@"letters.db"];
char *error;
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:dbPathString]) {
const char *dbPath = [dbPathString UTF8String];
NSLog(@"Declared");
// create database here
if (sqlite3_open(dbPath, &lettersDB)==SQLITE_OK) {
NSLog(@"'If' statement is ok");
const char *sql_stmt = "CREATE TABLE IF NOT EXISTS LETTERS (ID INTEGER PRIMARY KEY AUTOINCREMENT, A TEXT, B TEXT, C TEXT, D TEXT, E TEXT, F TEXT, G TEXT)";
NSLog(@"Declared");
sqlite3_exec(lettersDB, sql_stmt, NULL, NULL, &error);
NSLog(@"Execution complete.");
sqlite3_close(lettersDB);
NSLog(@"Close complete.");
NSLog(@"Database creation successful.");
}
}
}
我如何解决这个问题?提前感谢。您使用的是
NSDocumentationDirectory
,而您应该使用NSDocumentDirectory
目录
更改此项:
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
为此:
NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
遇到此类问题时,请检查错误。在用于打开数据库的
if
语句中添加else
。日志sqlite\u errmsg()
。谢谢。我一定要记住这一点。我怎么会错过呢?我真是个白痴。谢谢你的帮助。如果你检查了错误,就不会错过了。(包括“未找到”返回的零)你不是白痴。我已经做了很多了。这是一个常见的错误,Xcode中的自动完成并没有帮助。