Как удалить UIImageView с ассоциированным тегом и идентификаторами
У меня есть UIImageView, связанный с object_sku. Изображения отображают прокрутку для интерактивного UIButton. Когда я нажимаю, он переходит в центр экрана и отображается как тег 0,1,2,3. Изображение Tag 0 содержит object_sku 123, Tag 1 содержит тест object_sku, Tag 2 содержит object_sku test1. Изображения UIImageView отображаются в порядке следования первого щелчка изображения tag 0 и tag1, tag2. Если я удаляю изображение Tag0, оно получает NSLog тега object_sku (test1). Почему он не получает Tag0 object_sku. Это получает последнее значение обновления с экрана. Как это решить? Я должен получить, если я удаляю изображение Tag0, я должен получить object_sku 123. Но я не получил.
Изображения в центре экрана из массива:
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));
// }
}
}
}
}
1 ответ
В своей процедуре удаления вы перебираете изображения, чтобы увидеть, какие из них удалить, но затем переходите к использованию. object.object_sku
(который, кажется, не имеет никакого отношения к изображению, которое вы нажали). Я бы предположил, что вы собираетесь использовать tag
изображения, чтобы узнать, какой базовый объект вы удаляете.