0

我有一个带有保存按钮的应用程序。当我单击保存按钮时,应用程序应自动更新一行的值并将其设置为 YES。

到目前为止,我有以下代码,但它实际上并没有工作。请记住,我的应用程序是一个选项卡菜单应用程序。在第一个视图中,我有表格单元格,单击时我转到另一个视图控制器,即详细信息视图控制器,其中存在按钮。

当我单击按钮时,数据库中“Fav”字段的值应该从 NO 变为 YES。

这是我的代码:

- (IBAction)AddButClick:(UIButton *)sender {



    [AddBut setImage:[UIImage imageNamed:@"apple-logo copy.png"] forState:UIControlStateSelected];
    [AddBut setImage:[UIImage imageNamed:@"apple-logo copy.png"] forState:UIControlStateHighlighted];
    Favo = [[NSMutableArray alloc] initWithCapacity:1000000];

  //  NSLog(authorNAme);

    @try {
        NSFileManager *fileMgr = [NSFileManager defaultManager];
        // NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"dictionary.sqlite"];
        //NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"authorsDb2.sqlite"];
        //     NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"FinalDb.sqlite"];
        //NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"xxJuridique-FINAL-OK.sqlite"];



        NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"data.sqlite"];

        BOOL success = [fileMgr fileExistsAtPath:dbPath];
        if(!success)
        {
            NSLog(@"Cannot locate database file '%@'.", dbPath);
        }
        if(!(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK))
        {
            NSLog(@"An error has occured: %@", sqlite3_errmsg(db));

        }



        sqlite3_stmt *compiled_statement1;
        if(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK) {
            //const char *sqlStatement = 
            NSString *formatedSql = [NSString stringWithFormat:@"UPDATE Sheet1 SET Fav = 'YES'  WHERE field3 = '%@' " , authorNAme2];

           NSLog(@"This is the query %@",formatedSql);
            const char *sql = [formatedSql UTF8String];
            NSLog(@" !!!!!!!! In the middle of it !!!!!!!!!!!!");
            if (sqlite3_prepare_v2(db, sql, -1, &compiled_statement1, NULL) != SQLITE_OK) {
                NSLog(@"!!!!!!!!!!!!!!!!!!!ERRRRROOOOOOORRRRRRRRR!!!!!!!!!!!!!!!!!!!!!!!!!");
                NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(db));
            }
        //    sqlite3_exec(db, [compiled_statement1 UTF8String], NULL, NULL, NULL);
//sqlite3_bind_text(compiled_statement1, 1, [formatedSql UTF8String], -1, SQLITE_TRANSIENT);


        int success = sqlite3_step(compiled_statement1);

        sqlite3_reset(compiled_statement1);
        if (success != SQLITE_ERROR) {
            NSLog(@"Successfully inserted");
            sqlite3_last_insert_rowid(db);
        }
            sqlite3_finalize(compiled_statement1);


        }

        //        
//        BOOL success = [fileMgr fileExistsAtPath:dbPath];
//        
//        if(!success)
//        {
//            NSLog(@"Cannot locate database file '%@'.", dbPath);
//        }
//        if(!(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK))
//        {
//            NSLog(@"An error has occured: %@", sqlite3_errmsg(db));
//            
//        }


        // const char *sql = "SELECT F_Keyword FROM wordss";  
        const char *sql = "SELECT * FROM Sheet1";
        NSLog(@"Successfully selected from database");
        sqlite3_stmt *sqlStatement;
        if(sqlite3_prepare(db, sql, -1, &sqlStatement, NULL) != SQLITE_OK)
        {
            NSLog(@"Problem with prepare statement:  %@", sqlite3_errmsg(db));


        }else{


            NSLog(@"Got in the else tag");

            while (sqlite3_step(sqlStatement)==SQLITE_ROW /*&& PAss == NO*/) {


                NSLog(@"Got in the while tag");

                Author * author = [[Author alloc] init];
                NSLog(@"Author initialized");

                author.name = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,10)];
                NSLog(@"Initialization ok");
           //     NSLog(author.name);

                if(/*author.name == @"NO" &&*/ HighLighted == NO){
                    //const char *sql2 = "INSERT INTO Sheet1 ";

                    [AddBut setImage:[UIImage imageNamed:@"apple-logo copy.png"] forState:UIControlStateNormal];
                    NSLog(@"We have not selected it as fav yet");
                  //  [AddBut setSelected:NO]; //btn changes to normal state
                    NSLog(@"The button was NOt highlighted and now is");
                    HighLighted = YES;







                    //  PAss = YES;
                    //  [self release];
                     break;


                }

                else
                {

                    NSLog(@"We have selected it as fav");

                    [AddBut setImage:[UIImage imageNamed:@"apple-logo.png"] forState:UIControlStateNormal];
                    [AddBut setSelected:NO]; //btn changes to normal state
                    NSLog(@"The button was highlighted and now is NOt");


                    HighLighted = NO;
                     break;

                   // [self viewDidLoad];
                  //  PAss = YES;

                }
         //       [Favo release];

         //       NSLog(Favo);

//                author.name = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,2)];
//                author.title = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement,2)];
//                author.genre = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sqlStatement, 4)];
//                [theauthors addObject:author];
            }
        }
    }
    @catch (NSException *exception) {

        NSLog(@"Problem with prepare statement:  %@", sqlite3_errmsg(db));

    }
    @finally {
        //   sqlite3_finalize(sqlStatement);
        sqlite3_close(db);

        return Favo;
    }
4

1 回答 1

1

问题不在于添加,而是点击,它实际上是在 viewWillAppear 中,我应该在其中完成:

 [self authorList2];
 [self.tableView reloadData] ;

为了加载可变数组然后重新加载数据

于 2012-10-03T05:45:11.910 回答