• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 如何使用 Firebase 在 UITableViewController 中正确显示数据?

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:15:53 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在构建一个类似于“instagram”的应用程序,其中包含带有图片的帖子。我正在使用 Firebase 存储/检索数据。

我的问题出现是因为帖子以随机方式显示。例如,在 cellForRowAtIndexPath 中,第一个帖子显示在 indexPath[0],下一个帖子是 [1],但下一个应该在 [2] 的帖子显示在 [0] .

我将复制粘贴与该问题最相关的代码:

这是我检索分数的类(class):

////// Arrays to store the data
nameArray = [[NSMutableArray alloc]init];
scoreArray = [[NSMutableArray alloc]init];
photomealArray = [[NSMutableArray alloc]init];
keysArray = [[NSMutableArray alloc]init]; // Reference to know what post should be scored. 


// Reference to the Database
self.storageRef = [[FIRStorage storage] reference];
FIRDatabaseReference *rootRef= [[FIRDatabase database] referenceFromURL"https://XXXXXXX.firebaseio.com/"];


// Query all posts
[[rootRef child"osts"] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {

    if(snapshot.exists){

        NSDictionary *dict = snapshot.value;
        for (NSString *key in dict) {

            // Query all users to show the Name of the person who posts
            [[rootRef child"Users"] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull Usersnapshot) {

                if(Usersnapshot.exists){
                    NSDictionary *Userdict = Usersnapshot.value;
                    for (NSString *Userkey in Userdict) {


                        NSString *Users_UserID = [Userdict[Userkey] valueForKey"UserID"];
                        NSString *UserID = [dict[key] valueForKey"UserID"];
                        // If the userID matches with the person who posts, then add it to the array
                        if([Users_UserID isEqualToString:UserID]) [nameArray addObject:[NSString stringWithFormat"%@",[Userdict[Userkey] valueForKey"Name"]]];

                    }
                }

            }];

            UIImage *mealPhoto = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL   URLWithString:[dict[key] valueForKey"ostPhoto"]]]];

            NSString *Score = [dict[key] valueForKey"Score"];
            NSString *PostKeys = [dict[key] valueForKey"KeyforPost"];
            if([Score isEqual:@"null"]) [scoreArray addObject:@"0"]; else [scoreArray addObject:Score];
            [photomealArray addObject:mealPhoto];
            [keysArray addObjectostKeys];

        }

    }
} withCancelBlock:^(NSError * _Nonnull error) {
    NSLog(@"%@", error.localizedDescription);
}];

如果我退出并重新启动应用程序,新帖子将存储在从 [0] 开始的任何“空”索引中,这是预期的。

这就是 didSelectRowAtIndexPath 的样子:

-(void)tableViewUITableView *)tableView didSelectRowAtIndexPathNSIndexPath*)indexPath{

FeedTableViewCell *cell =[tableView cellForRowAtIndexPath:indexPath];

if(cell.selectionStyle != UITableViewCellSelectionStyleNone){

    if([score.text intValue] >= -1 && [score.text intValue] <= 1 && ![score.text  isEqual: @""]){

            NSString *keyforcell = [keysArray objectAtIndex:indexPath.row];

            NSLog(@"key a usar :%@", keyforcell);

             ref = [[FIRDatabase database] referenceFromURL:@"https://XXXXX.firebaseio.com"];


            [[[[self.ref child:@"osts"] child:keyforcell] child:@"Score"] setValue:[NSNumber numberWithInt:[score.text intValue]]];

            [[[[self.ref child:@"osts"] child:keyforcell] child:@"Rated"] setValue:@"YES"];

            [scoreArray insertObject:[NSNumber numberWithInt:[score.text intValue]] atIndex:indexPath.row];

            cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }

}

我曾尝试使用 observeSingleEventOfTypeobserveEventType,因为这可能与单个仅调用一次这一事实有关。另外我认为在选择单元格后会触发 viewDidLoad() ,但它不应该。另外,我认为它与 NSMutableArrays 有关,但我不完全确定

谁能帮帮我?

更新:我知道 Firebase 和 NSDictionary 都不会返回/存储排序数据,所以我的猜测是我的问题与排序项目有关。我了解了 orderbykeyorderbyvalue 但它们似乎不起作用。



Best Answer-推荐答案


不清楚您的问题是什么,但您不应忘记 Firebase 数据库中没有数组。唯一的集合类型是字典,字典没有键顺序。

您应该考虑对对象使用排序系统,而不是直接将它们添加到数组中。

关于ios - 如何使用 Firebase 在 UITableViewController 中正确显示数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47209289/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap