我有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));
// }
}
}
}
}
與你的問題無關,如果你調用'sqlite3_prepare_v2',你應該在迭代你的結果集時調用'sqlite3_finalize',否則你會泄漏。此外,您應該檢查SQLite調用的結果,如果其中任何一個未能返回'SQLITE_OK'(sqlite3_step應該返回'SQLITE_ROW'或'SQLITE_DONE'除外),請記錄'sqlite3_errmsg'。現在,如果您有任何SQL錯誤,您無法知道。 – Rob
我沒有任何SQL錯誤 – user3743552
好的。本着防禦性編程的精神,如果準備失敗並且你的一些人不這樣做,我總是會記錄錯誤。不過沒什麼大不了的。但絕對要添加'sqlite3_finalize'調用。 – Rob