将NSDictionary附加到[NSDictionary]会产生意外结果

星际霸主

我有一些[NSDictionary]充满了我正在检查值的书,以更好地在UICollectionView中显示内容。我正在检查一个键是否包含几个ISBN号。如果可以,我希望将它们显示为单独的书。关键是'isbn',如果值类似于'[“ 9788252586336,” 9788203360510“]',我希望将它们显示为单独的书。因此,它们将成为两本“相等”的书,但书号不同。

这是发生了什么:

  1. 继承人的代码

    func parserFinishedSuccesfully(data: NSMutableArray){
    self.tempArray = []
    if !data.isEqual(nil) && data.count > 0
    {
            for i in (0 ..< data.count)
            {
                var currentBook = NSDictionary()                   
    
                if !((data[i] as? NSDictionary)!.valueForKey("isbn") as? String)!.isEmpty
                {
                    //If the book do have isbn then I'll want to display it
                    currentBook = data[i] as! NSDictionary
    
                    if let isbn = currentBook.valueForKey("isbn") as? String
                    { //isbn could be "9788252586336; 9788203360510"
    
                        let isbnNumbersRecieved = isbnNumbers(isbn)
                         //gives: ["9788252586336", " 9788203360510"]
    
                        if isbnNumbersRecieved.count >= 2 
                        {
                            //We are dealing with several isbn numbers on one book
                            for isbn in isbnNumbersRecieved 
                            { //The problem lies here!
                                print("This is the isbn: \(isbn)")
                                currentBook.setValue(isbn, forKey: "isbn")
                                self.tempArray.append(currentBook)
                            }
    
                        }
                        else
                        {
                            //Only one isbn
                             //currentBook.setValue(isbnNumbersRecieved.first, forKey: "isbn")
                            //self.tempArray.append(currentBook)
                        }
                    }else{
                        //No isbn, no want
                        print("No isbn")
                    }  
                }
    
            }
        print(self.tempArray)
        self.collectionView.reloadData()
    
    }
    

在代码中它说:“问题就在这里”。好吧...问题就在那里。当它使用此数组[“ 9788252586336”,“ 9788203360510”]进入该循环时,它将首先打印第一个数字,然后根据需要打印第二个数字。然后,当它需要currentBook时。我更改了之前的值为“ 9788252586336; 9788203360510”和仅第一个isbn数字“ 9788252586336”的值。然后,我将整个currentBook附加到数组(tempArray)中,该数组将用于稍后在UICollectionView中显示书籍。当第二次迭代开始时,isbn编号将为“ 9788203360510”,与第一次迭代一样,我将isbn编号设置为currentBook中的isbn编号。奇怪的事情现在发生了。当currentBook得到' 附加到(tempArray)的s应该包含同一本书,但具有不同的isbn数字。但实际上它包含同一fu @%$书,具有相同的isbn编号。不知何故,第二次迭代添加了具有相同isbn编号的2本书,而应该存在的第一本书就消失了...

图片1在第一次迭代之后,图片2在第二次迭代之后。如果查看键“ isbn”,您会发现代码中有些混乱……

图片1 图片1

图片2 图片2

这怎么会发生,我该如何解决?

亚伦·布拉格(Aaron Brager)

发生这种情况是因为currentBook引用类型,而不是类型。您正在将同一本书的两个引用添加currentBook到数组。

作为一个简单的解决方案,您可以copy()在修改字典并将其添加到数组之前先将其添加到字典中。一个更可靠的解决方案是改为使所有模型都使用值类型。


进一步阅读:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将元素添加到字典中的列表会产生意外的结果 c#

来自分类Dev

否定instanceof会产生意外结果

来自分类Dev

CSS嵌套会产生意外结果

来自分类Dev

事先连接会产生意外结果

来自分类Dev

使用 "%" 操作会产生意外结果

来自分类Dev

Codeigniter-将or_where_in与like一起使用会产生意外结果

来自分类Dev

将Array.map()与parseInt结合使用会产生意外结果

来自分类Dev

将多维数组作为C中函数的指针传递会产生意外结果

来自分类Dev

为什么将char类型用作循环索引会产生意外结果?

来自分类Dev

在Go并行中处理数组会产生意外结果

来自分类Dev

为什么此MEX函数会产生意外结果?

来自分类Dev

按日期对数组排序会产生意外结果

来自分类Dev

到达void函数的结尾会产生意外结果

来自分类Dev

在PostgreSQL中与NULL进行比较会产生意外结果

来自分类Dev

寻路代码会产生意外结果

来自分类Dev

打印双打数组会产生意外结果

来自分类Dev

减去numpy数组会产生意外结果

来自分类Dev

为什么在Excel中查找会产生意外结果?

来自分类Dev

Moment.js的简单功能会产生意外的(?)结果

来自分类Dev

尝试在别名中使用`pwd`会产生意外结果

来自分类Dev

写出文本框会产生意外的结果

来自分类Dev

在同一模型中注释会产生意外结果

来自分类Dev

迭代日期数组的函数会产生意外的结果

来自分类Dev

日历字段增加会产生意外结果

来自分类Dev

为什么“大于”数字比较会产生意外结果

来自分类Dev

replace()产生意外结果

来自分类Dev

将char转换为整数会产生意外的值

来自分类Dev

“观看”卷曲会产生意外的输出

来自分类Dev

数组推送会产生意外的数组

Related 相关文章

热门标签

归档