[英]iOS - Refreshing content in UICollectionView custom cell
我对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);
}
}
从数据库获取数据:
+(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];
}
尝试使用GCD:
dispatch_async(dispatch_get_main_queue(), ^{
[self.collectionView reloadData];
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.