2

申し訳ありませんが、自分で試してみましたが、viewdidload メソッドに次のコードがある解決策が見つかりませんでした

NSString *docsDir;
NSArray *dirPaths;

dirPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
docsDir=[dirPaths objectAtIndex:0];
databasePath=[[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"database.db"]];

NSLog(@"%@",databasePath);
NSFileManager *filemgr=[NSFileManager defaultManager];

if([filemgr fileExistsAtPath:databasePath]==YES)
{


[self getFinal];
}
else {
    NSLog(@"please order");
}
[super viewDidLoad];

次のように getFinal と呼ばれるメソッドを呼び出します

 sqlite3_stmt  *statement;

const char *dbpath = [databasePath UTF8String];

if (sqlite3_open(dbpath,&database)==SQLITE_OK)
{
    NSString *querySQL = [NSString stringWithFormat: @"SELECT * FROM FINALORDER"];

    const char *query_stmt = [querySQL UTF8String];     
    sqlite3_prepare_v2(database,query_stmt,-1,&statement,NULL);

    if (sqlite3_step(statement) == SQLITE_ROW)
    {
        NSString *itemname = [[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 1)]autorelease];
        //itemn.text = itemname;

        NSString *qua = [[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 2)]autorelease];
        //quantity.text = qua;

        NSString *total = [[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 3)]autorelease];
        //totalcost.text=total;
    }


}
    sqlite3_finalize(statement);
    sqlite3_close(database);

項目名、金額、合計をテーブルビュー形式で表示したい。プロトコルを使用してデリゲートとデータ ソース メソッドを実装しようとしましたが、データ ソース メソッド cellforindexpath がこれらの変数を認識しません。ありがとう、ここにテーブルビューのコードがあります

 - (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
   {
  //I DONT KNOW WHAT TO RETURN HERE..
   }

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}

// Set up the cell...
cell.textLabel.text = itemname  //i need to get the itemname here
cell.detailTextLabel.text = qua,total //i need the quantity and the totalcost values   

return cell;

}

4

5 に答える 5

0

itemNameデータソースメソッドからは見えないスコープ内のローカル変数としてなどを宣言しました。それらをViewControllerのインスタンス変数として保存する必要があります。

于 2012-08-28T11:58:15.897 に答える
0

そのために、配列を取得しました。次に、while ループ内のコードに追加します。

listOfItems = [[NSMutableArray alloc] init]; 
[listOfItems addObject:itemname];

次に、方法:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [listOfItems count]; }
于 2012-08-28T12:29:26.083 に答える
0

コードを使用できます:

NSString *itemname, *qua, *total;

内部機能:

sqlite3_stmt  *statement;
const char *dbpath = [databasePath UTF8String];

if (sqlite3_open(dbpath, & database) == SQLITE_OK) {
    NSString *querySQL = [NSString stringWithFormat: @"SELECT * FROM FINALORDER"];
    const char *query_stmt = [querySQL UTF8String];

    if (sqlite3_prepare_v2(database, query_stmt, -1, &statement, NULL) == SQLITE_OK) {

       while (sqlite3_step(statement) == SQLITE_ROW) {

          itemname = [[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 1)]autorelease];
          qua = [[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 2)]autorelease];
          total = [[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 3)]autorelease];
       }
    }
sqlite3_finalize(statement);
}
sqlite3_close(database);
[tblView reloadData];
于 2012-08-28T12:15:16.580 に答える
0
Please Try This one it might be help you

    +(NSMutableArray*)getData
    {
        NSString *strDestPath = [NSString stringWithFormat:@"%@/Documents/DBEmployee.sqlite",NSHomeDirectory()];
        sqlite3 *db;
        NSMutableArray   *empArr = [[NSMutableArray alloc]init];
        if(sqlite3_open([strDestPath UTF8String] , &db)  == SQLITE_OK)
        {
            NSString *query = @"SELECT * FROM Employee";
            char* err_msg;
            sqlite3_stmt* statement;
            if(sqlite3_prepare_v2(db, [query UTF8String], -1,&statement, &err_msg) == SQLITE_OK)
            {
                while (sqlite3_step(statement) == SQLITE_ROW) {
                    DatabaseKeys *emp = [[DatabaseKeys alloc]init];
                    emp.Eno = sqlite3_column_int(statement, 0);
                    NSString *strn = [NSString stringWithFormat:@"%d",emp.Eno];
                    [empArr addObject:strn];


                }
            }
        }
        return empArr;
    }
于 2017-04-04T07:33:26.680 に答える
0

明確さと単純さのために、Core Data または少なくともFMDBを、ユーザーとデータベースの間のレイヤーとして使用する必要があります。

TableView の問題については、コードも投稿していただければ幸いです。

于 2012-08-28T11:45:54.717 に答える