1

FINALORDERいくつかのデータが取り込まれ、テーブルビューに表示されるdb テーブルがあります。

..のalertview中に を挿入しました。didSelectRowAtIndexPath

    alert=[[UIAlertView alloc]initWithTitle:@"Cancel Order" message:@"Do you want to cancel the order" delegate:self cancelButtonTitle:@"dismiss" otherButtonTitles:@"Ok",nil];
    [alert show];
    [alert release];

デリゲート メソッドは次のとおりです。

 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
 {
const char *dbpath = [databasePath UTF8String];
sqlite3_stmt *statement;
if(buttonIndex==1)
{
    NSString *deleteSQL = @"DELETE FROM FINALORDER WHERE itemname=?"; 

    if (sqlite3_prepare_v2(database, [deleteSQL UTF8String], -1, &statement, NULL) != SQLITE_OK) 
        NSLog(@"%s error preparing %s", __FUNCTION__, sqlite3_errmsg(database)); 
    if (sqlite3_bind_text(statement, 1, [itemname UTF8String], -1, NULL) != SQLITE_OK) 
        NSLog(@"%s error binding %s", __FUNCTION__, sqlite3_errmsg(database)); 
    if (sqlite3_step(statement) != SQLITE_DONE) 
        NSLog(@"%s error executing %s", __FUNCTION__, sqlite3_errmsg(database)); 
    if (sqlite3_finalize(statement) != SQLITE_OK) 
        NSLog(@"%s error finalizing %s", __FUNCTION__, sqlite3_errmsg(database));


}
 }

疑問符の代わりに使用できる項目名を取得するにはどうすればよいですか? 私のデータベースは次のフィールドで構成されていることに注意してくださいitemname,quantity,totalcost

4

2 に答える 2

1

didSelectRowAtIndexPath では、名前をクラス変数に格納してから使用します。

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
NSArray *names = [cell.textLabel.text componentsSeparatedByString:@" "];
NSString *temp;
for (int i=0; i<[names count]-2; i++) 
{
   if (!temp) 
   {
         temp = [names objectAtIndex:i];
   }
   else
   {
         temp = [NSString stringWithFormat:@"%@ %@",temp, [names objectAtIndex:i]];
   }
}
self.itemName = temp;

そしてそれを使う

    NSString *deleteSQL = [NSString stringWithFormat:@"DELETE FROM FINALORDER WHERE itemname=%@",self.itemName];

それが役に立てば幸い。幸せなコーディング:)

于 2012-08-31T08:24:39.480 に答える
1

@AnshukGargが提案したこと、または私が行うように行うことができます。UIAlertView を処理する独自のカスタム クラスを作成できます。

例えば:

         DataAlertThing.h

            #import <Foundation/Foundation.h>

            @protocol DataAlertThingDelegate{
            @required

                -(void)shouldDeleteItem:(ItemType*)itemName;
            }

            @interface DataAlertThing : NSObject <UIAlertViewDelegate>
            @property (nonatomic, weak)id delegate;
            @property (nonatomic, strong) id itemName;

            -(id)initWithItemName:(ItemType*)myItemName;
        @end

    DataAlertThing.m

    #import "DataAlertThing.h"

    @implementation DataAlertThing



-(id)initWithItemName:(ItemType*)myItemName{
   self = [super init];
   if (self !=nil{
   self.itemName = myItemName;
  UIAlertView *alert = [UIalertVIew alloc]init...delegate:self..]
  [alert show];
}
 return self;
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
 {
if(buttonIndex==1)
{ 

   [delegate shouldDeleteItem:self.itemName];

 }
}

上記から、私が提案していることについて十分なアイデアを得ることができれば幸いです。アラートロジックを独自のカスタムクラスにカプセル化します。代わりにこの時点でブロックを使用することもできますが、今日は 1 つの例で十分だと思います :)

@synthesize を正しくする必要がないように、この ARC と最新の規則を使用していることに注意してください。

アラート ビューを初期化する既存のコード。代わりに、このカスタム クラスを初期化してください。

whatever = [[DataAlertThing alloc]initWithItemName:myItemName];
[whatever setDelegate:self];

そして、以下を実装します

-(void)shouldDeleteItem:(ItemType*)itemName{
 //do what you need here to delete the record

}
于 2012-08-31T08:42:43.860 に答える