2012-08-31 65 views
1

我有一個名爲FINALORDER的db表,它填充了一些數據,然後顯示在tableview中。當用戶點擊alertview時從sqlite數據庫中刪除一條記錄

我插入了didSelectRowAtIndexPath內的alertview ..

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

+1

你爲什麼不使用CoreData?你知道這是一個下面的SQLight數據庫。它使用起來也更容易,並且最終編寫的代碼更少以管理數據。 – AppHandwerker

+0

我已經在詛咒自己了.. ..但是,我已經走了很遠,我的項目回頭看起來似乎不是一個選項.. :-( – BoredToDeath

+0

我會爭辯說,它總是一個選項,它會讓你生活在從長遠來看,這是非常容易的,至少你已經定義了數據模型,所以在CoreData中實現它應該是一件輕而易舉的事情,這裏有很多示例供你跟隨,以及來自Apple的一些很好的示例代碼 – AppHandwerker

回答

1

in 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]; 

希望它幫助。快樂編碼:)

+0

你的答案似乎是正確的,但我沒有一個arrayNameToDisplayData..i只有記錄存儲在數據庫中的某處..我使用numericIds數組訪問它們..我希望你下站在我的意思 – BoredToDeath

+0

無論你顯示數據的方式,必須有一個索引路徑用於cellForRowAtIndexPath方法中的每個單元格。所以在arrayNameToDisplayData的情況下,你可以直接訪問你的數據庫。 –

+0

看看我的cellForrowat..http://pastie.org/4630043 – BoredToDeath

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]; 

} 
} 
從上面你得到足夠的想法,以什麼我建議的

希望 - 你封裝你的警報邏輯在自己的自定義類。你也可以在這一點上,而不是使用一個塊,但我認爲一個例子就夠了今天:)

請注意,這ARC還利用現代約定,所以你不需要右邊的@synthesize

在您初始化警報視圖的現有代碼中。改爲初始化此自定義類。

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

以及與此實現以下

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

} 
+0

我明白你的意思。 。但你可以建議一些比這個..我真的不知道你將如何傳遞你的myItemName ..注意:我有我的數據庫中的3個字段..我用一個名爲numericIds的NSMutableArray顯示數據..我希望你明白我的意思.. – BoredToDeath

+0

然後製作「ItemType」ID,然後傳遞它一個NSMutableArray,畢竟它不關心它傳入或傳出什麼,因爲DataAlertThing不會對數據做任何事情。因此它可以告訴類創建它做什麼。然後,需要在現有類(當前創建UIAlertView的類)中採用DataAlertThingDelegate協議,以便它可以響應回調並使用刪除記錄數據通過sed它。 – AppHandwerker

+0

我已更新我的答案以反映更改並修復一些相當明顯的遺漏。 – AppHandwerker

相關問題