我非常喜欢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];
}