iOS - 在UICollectionView自定义单元格中刷新内容

时间:2014-03-11 11:50:02

标签: ios iphone objective-c

我非常喜欢iOS开发和Objective-C,我正在制作一个布朗尼点应用程序。 我使用的是一个sqlite数据库,用于存储员工姓名和他们拥有的点数,我还有一个自定义单元格,用于显示名称以及它们在标签上的分数。

为了增加积分,我在单元格上有一个按钮,指向更新积分所需的SQL Update语句。

我的问题是当我点击按钮时一切正常但它不会显示更新的点,直到我离开视图然后再回到它。 我试过了:

[self.collectionview reloadData];

我在按钮动作中试过这个,我甚至尝试添加一个轻敲手势识别器,这样每当用户点击它时,它会重新加载数据。 一切都没有成功,我没有得到错误或崩溃,它只是没有刷新标签。

非常感谢任何帮助< 3

编辑:如果有帮助,我有一个名为DatabaseHelper的类,其中包含所有与SQL相关的方法。

这是我的更新方法:

+(void)minusPoints:(NSString *)cell {
[self databaseInit];


if (sqlite3_open(dbpath, &peopleDB)== SQLITE_OK) {

    NSString *updateSQL = [NSString stringWithFormat:@"UPDATE PEOPLE SET POINTS = (POINTS - 1) WHERE ID =%@", cell];
    sqlite3_prepare_v2(peopleDB,[updateSQL UTF8String],-1,&statement,NULL);

    if (sqlite3_step(statement)== SQLITE_DONE) {
        NSLog(@"Updated Successfully");
    }
    else {
        NSLog(@"%s SQLITE_ERROR '%s' (%1d)", __FUNCTION__, sqlite3_errmsg(peopleDB), sqlite3_errcode(peopleDB));
    }
    sqlite3_finalize(statement);
    sqlite3_close(peopleDB);
}

}

从DB获取数据:

+(NSMutableArray*)getData {
[self databaseInit];

peopleArray = [[NSMutableArray alloc] init];

if (sqlite3_open(dbpath, &peopleDB)== SQLITE_OK)
{

    NSString *selectSQL = @"SELECT ID, NAME, POINTS FROM PEOPLE ORDER BY POINTS DESC";
    sqlite3_prepare_v2(peopleDB,[selectSQL UTF8String],-1,&statement,NULL);

        while (sqlite3_step(statement)== SQLITE_ROW)
        {
            PersonObject *newPerson = [[PersonObject alloc]init];
            newPerson.ID = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)]integerValue];
            newPerson.name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];
            newPerson.points = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 2)] integerValue];
            [peopleArray addObject:newPerson];

        }
    NSLog(@"%s SQLITE_ERROR '%s' (%1d)", __FUNCTION__, sqlite3_errmsg(peopleDB), sqlite3_errcode(peopleDB));
    }

    sqlite3_finalize(statement);
    sqlite3_close(peopleDB);

return peopleArray;

}

编辑2:我已经尝试过这样的回答第一个答案,仍然没有运气。 (在ViewController.m中)

//refresh cells
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    UITouch *touch = [[event allTouches]anyObject];
    if ([touch view]) {
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.collectionView reloadData];
    });
}
   [super touchesBegan:touches withEvent:event];
}

0 个答案:

没有答案