アプリデリゲートで開いたsqlite3 dbを使用しています。ボタンを押した後、別のビューで動作しない更新ステートメントを実行します。アプリの委任コード:
- (BOOL) openDB{
//NSMutableArray *logoArray = [[NSMutableArray alloc] init];
@try {
NSFileManager *fileMgr = [NSFileManager defaultManager];
NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"SportsLogo.sqlite"];
BOOL success = [fileMgr fileExistsAtPath:dbPath];
if(!success)
{
NSLog(@"Cannot locate database file '%@'.", dbPath);
}
if(!(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK))
{
return NO;
}
}
@catch (NSException *exception) {
NSLog(@"An exception occured: %@", [exception reason]);
}
@finally {
return YES;
}
}
- (sqlite3 *) getDB{
return db;
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
//MySportsLogosDB *myDB = [[MySportsLogosDB alloc]init];
//NSMutableArray *myArray = [[NSMutableArray alloc]init];
if ([self openDB] != YES){
NSLog(@"Problem with opening the DB");
return NO;
}
return YES;
}
次に、ボタンを押すと、次のコードが実行されます。
-(IBAction)enter:(id)sender
{
UIImage *answerImage = [UIImage imageNamed:[NSString stringWithFormat:@"%@%@",currentTitle, @".png"]];
if ([[currentTitle lowercaseString] isEqualToString:logoNameText.text]){
[imageGuessView setImage:answerImage];
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
// NSString *sql =[NSString stringWithFormat:@"select rowid from mytable where name = %@",str];
NSString *sql = [NSString stringWithFormat:@"UPDATE LogosTbl set logoStatus = ?1 WHERE logoName = '%@'",[currentTitle lowercaseString]];
sqlite3_stmt *sqlStatement;
if(sqlite3_prepare_v2([appDelegate getDB], [sql UTF8String], -1, &sqlStatement, NULL) != SQLITE_OK)
{
NSLog(@"Problem with prepare statement");
NSLog(@"%s",sqlite3_errmsg([appDelegate getDB]));
// printf( "could not prepare statemnt: %s\n", sqlite3_errmsg(database) );
}
if(SQLITE_DONE != sqlite3_step(sqlStatement)){
NSLog(@"Problem with UPDATE");
}
}
else{
NSLog(@"First No");
}
}
準備はOKで、ステップもOKですが、データが更新されたことはわかりません。sqlite ファイルは Xcode のプロジェクト ツリーにあり、ファイル システムのプロジェクト ディレクトリに配置され、読み取りと書き込みのアクセス許可があります。
ありがとうございました