在 for 循环中添加到 NSArray 会导致重复?

Posted

技术标签:

【中文标题】在 for 循环中添加到 NSArray 会导致重复?【英文标题】:Adding to NSArray inside of for loop causes a duplication? 【发布时间】:2020-07-04 01:40:38 【问题描述】:

我正在尝试从 firebase 获取一些数据库值,但是当我尝试将这些值存储在 NSArray 中时,它会写入第一个值,然后用新值覆盖它并再次复制该值,我一直在尝试至少一个半小时试图克服这个问题。任何帮助将不胜感激。谢谢!

代码:

databaseContents = [NSArray new];
    
FIRDatabaseReference *ref = [[FIRDatabase database] reference];

[[ref child:@"posts"] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) 
    for (FIRDataSnapshot *children in snapshot.children) 
        NSDictionary *snapshotAsDict = [children value];
        NSString *postTitle = [snapshotAsDict valueForKey:@"Title"];
        NSString *postBody = [snapshotAsDict valueForKey:@"Body"];
        Post *post = [[Post alloc] initWithPostTitle:postTitle initWithPostBody:postBody];
       // [databaseContents addObject:post];
        databaseContents = [databaseContents arrayByAddingObject:post];
        for (post in databaseContents) 
            NSLog(@"%@", [post getPostBody]);
        
    
    
    [[self tableView] reloadData];
];

JSON:


    "posts": 
        "127k9": 
            "Body": "This is another post",
            "Title": "Test"
        ,
        "17a32b": 
            "Body": "This is a post from the database, you did it!",
            "Title": "Well Done!"
        
    

来自 NSLog 的结果:

2020-07-04 02:35:00.970071+0100 AppName [27829:919355] This is value1
2020-07-04 02:35:00.970390+0100 AppName [27829:919355] This is value2
2020-07-04 02:35:00.970557+0100 AppName[27829:919355] This is value2

【问题讨论】:

嘿里斯。你能解释一下那个输出是出乎意料的吗?另请注意,我们看不到您的数据库,因此如果输出与此相关,您需要在 posts 添加 JSON(作为文本,请不要截图)。您可以通过单击Firebase Database console 上溢出菜单 (⠇) 中的“导出 JSON”链接来获取此信息。 您好,在数据库端看起来一切都很好,只是在 ios 端,特别是当我将它附加到列表时。我认为我对我在这个问题中尝试做的事情的描述性不够。这是 json "posts" : "127k9" : "Body" : "This is another post", "Title" : "Test" , "17a32b" : "Body" : "This is a post from the database, you did it!", "Title" : "Well Done!" 我正在尝试使用名为 Post 的自定义对象将两个帖子的正文和标题放入 NSArray。 谢谢。不过,日志现在与 JSON 完全不匹配,所以很难说发生了什么,也很难说你期望它输出什么。 【参考方案1】:

改为使用 NSMutableArray。

您实际上是通过将一个对象添加到上面直接启动的数组副本来重写整个数组。

这样就很简单了,所以..

[databaseContents addObject:post];

或将 [NSArray new] 放在 for 循环之前的块内

【讨论】:

以上是关于在 for 循环中添加到 NSArray 会导致重复?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在 for 循环中将键值对添加到 NSarray 或字典吗?

添加 HTTPS 支持会导致循环重定向

重定向到子域会导致重定向循环错误

自动释放的 NSArray 会导致内存泄漏吗?

web.config 重定向到 https 导致重定向循环

如何使用 for 循环在 NSString 中获取多个 NSArray 对象并一一发送该对象?