2014-06-23 30 views
0

我有UIImageView與object_sku關聯。圖像顯示可點擊的UIButton的滾動視圖。當我點擊它去屏幕的中心,並顯示標籤0,1,2,3。標籤0圖像包含object_sku 123,標籤1包含object_sku test,標籤2包含object_sku test1。 UIImageView圖像按照第一個圖像點擊tag0和tag1,tag2的屏幕順序顯示。如果我刪除Tag0圖像,它會得到Tag object_sku(test1)的NSLog。爲什麼它沒有獲得Tag0 object_sku。它從屏幕獲取最新更新值。如何解決這個問題?我必須得到,如果我刪除Tag0圖像,我應該得到object_sku 123.但我沒有得到。在屏幕的中央如何刪除與關聯標記和ids的UIImageView

圖片來自陣列:

  mmageView=[[UIImageView alloc]initWithFrame:CGRectMake(100,200,350,199)]; 


     [mmageView setUserInteractionEnabled:YES]; 

     // [mmageView setImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[productimg_array objectAtIndex:[sender tag]-1]]]]]; 


     [mmageView setImageWithURL:[NSURL URLWithString:[productimg_array objectAtIndex:[sender tag]-1]] placeholderImage:nil options:SDWebImageProgressiveDownload completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) { 



     }]; 


     [mmageView setTag:[sender tag]-1]; 

     NSLog(@"mmageView Tag: %i",mmageView.tag); 


     object = [[ObjectAddedToScreen alloc] init]; 
     object.productDescription = [descript_array objectAtIndex:[sender tag]-1]; 
     object.view = mmageView; 
     object.productId=[product_id_array objectAtIndex:[sender tag]-1]; 
     object.object_sku=[sku_array objectAtIndex:[sender tag]-1]; 


    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 


     NSString *path = [documentsDirectory stringByAppendingPathComponent:@"db1.sqlite"]; 
     NSLog(@"filepath %@",path); 


     if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) { 



      // const char *sql = [[NSString stringWithFormat:@"SELECT tag FROM product_sku where tag = '%ld'",(long)object.object_imageView.tag] cStringUsingEncoding:NSUTF8StringEncoding]; 


      const char *sqlInsert = [[NSString stringWithFormat:@"insert into product_sku (sku, tag) values ('%@', '%ld')", object.object_sku, (long)mmageView.tag] cStringUsingEncoding:NSUTF8StringEncoding]; 




      NSLog(@"sql is %s",sqlInsert); 

      // BOOL favExist = false; 

      sqlite3_stmt *statement, *addStmt; 

      if (sqlite3_prepare_v2(database, sqlInsert, -1, &statement, NULL) == SQLITE_OK) { 
       // We "step" through the results - once for each row. 
       while (sqlite3_step(statement) == SQLITE_ROW) { 



        // favExist = true; 

        const char *sqlInsert = [[NSString stringWithFormat:@"insert into product_sku (sku, tag) values ('%@', '%ld')", object.object_sku, (long)mmageView.tag] cStringUsingEncoding:NSUTF8StringEncoding]; 

        //---- 

        NSLog(@"sql insert is %s",sqlInsert); 


        // [catID release]; 

        if(sqlite3_prepare_v2(database, sqlInsert, -1, &addStmt, NULL) != SQLITE_OK) 
         NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database)); 

        NSLog(@"error is %s",sqlite3_errmsg(database)); 

        if(SQLITE_DONE != sqlite3_step(addStmt)) 
         NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(database)); 



       } 
      } 





     NSLog(@"mmageView object.object_sku is %@", object.object_sku); 

     [self.objectsAddedToScreen addObject:object]; 

     [self.view addSubview:mmageView]; 

刪除圖片:

int new_delete_tag; 

    NSString *sku_delete; 



    NSArray *subViewsArray = self.view.subviews; 
    CGPoint tapLocation1 = [sender locationInView: self.view]; 

    for(UIView *v in subViewsArray){ 
     if([v isKindOfClass:[UIImageView class]]) 
     { 
      UIImageView *imageView = (UIImageView *)v;{ 
       if (CGRectContainsPoint(imageView.frame, tapLocation1)){ 

        [imageView removeFromSuperview]; 


        for (object in self.objectsAddedToScreen) 


         if (object.view == sender.view) 
         { 
          // NSString *productDescription = object.productDescription; 

             // txtt.text=productDescription; 

           UIImageView *imageView = object.object_imageView; 

          NSInteger object_sku = sender.view.tag; 


         NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
        NSString *documentsDirectory = [paths objectAtIndex:0]; 


        NSString *path = [documentsDirectory stringByAppendingPathComponent:@"db1.sqlite"]; 
        // NSLog(@"filepath %@",path); 


        if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) { 



         const char *sql = [[NSString stringWithFormat:@"SELECT sku,tag FROM product_sku where tag = '%d'",object_sku] cStringUsingEncoding:NSUTF8StringEncoding]; 


         NSLog(@"sql is %s",sql); 

         // BOOL favExist = false; 

         sqlite3_stmt *statement, *addStmt; 

         if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK) { 
          // We "step" through the results - once for each row. 
          while (sqlite3_step(statement) == SQLITE_ROW) { 


           sku_delete = [[NSString alloc] initWithUTF8String: 
                (const char *) sqlite3_column_text(statement, 0)]; 

           NSLog(@"sku_delete is %@",sku_delete); 

           // favExist = true; 

           new_delete_tag = sqlite3_column_int(statement, 1); 

           NSLog(@"new_delete_tag is %d",new_delete_tag); 

           // if(new_delete_tag && sku_delete){ 


            sqlite3_stmt *addStmt; 

            const char *sqlDelete = [[NSString stringWithFormat:@"delete FROM product_sku where sku = '%@' AND tag = '%d'",sku_delete,new_delete_tag] cStringUsingEncoding:NSUTF8StringEncoding]; 



            NSLog(@"sql delete is %s",sqlDelete); 

            // NSLog(@"sql delete1 is %s",sqlDelete1); 

            if(sqlite3_prepare_v2(database, sqlDelete, -1, &addStmt, NULL) != SQLITE_OK) 
             NSAssert1(0, @"Error while deleting tag from product_sku . '%s'", sqlite3_errmsg(database)); 

            NSLog(@"%s error finalizing %s", __FUNCTION__, sqlite3_errmsg(database)); 

            if(SQLITE_DONE != sqlite3_step(addStmt)) 
             NSAssert1(0, @"Error while deleting tag from product_sku . '%s'", sqlite3_errmsg(database)); 


           // } 



          } 
         } 

        } 

         } 
+0

與你的問題無關,如果你調用'sqlite3_prepare_v2',你應該在迭代你的結果集時調用'sqlite3_finalize',否則你會泄漏。此外,您應該檢查SQLite調用的結果,如果其中任何一個未能返回'SQLITE_OK'(sqlite3_step應該返回'SQLITE_ROW'或'SQLITE_DONE'除外),請記錄'sqlite3_errmsg'。現在,如果您有任何SQL錯誤,您無法知道。 – Rob

+0

我沒有任何SQL錯誤 – user3743552

+0

好的。本着防禦性編程的精神,如果準備失敗並且你的一些人不這樣做,我總是會記錄錯誤。不過沒什麼大不了的。但絕對要添加'sqlite3_finalize'調用。 – Rob

回答

0

在你刪除程序,你迭代在圖像中看到其中刪除,但然後繼續使用object.object_sku(它看起來與您點擊的圖像沒有任何關係)。我會假定你要使用圖像視圖的tag以便知道你正在刪除哪個基礎對象。

+0

如果我點擊cat_id = 1圖像並顯示屏幕,請檢查我的更新代碼 – user3743552

+0

..然後單擊它顯示的屏幕上的cat_id = 2圖像。然後在cat_id = 1中刪除標記值0刪除cat_id = 2值。也許是因爲cat_id – user3743552

+0

的最新更新值,我使用了mvc ObjectAddedToScreen。 – user3743552

相關問題