gpt4 book ai didi

ios - 将 NSDictionary 附加到 [NSDictionary] 会产生意想不到的结果

转载 作者:行者123 更新时间:2023-11-29 00:52:13 26 4
gpt4 key购买 nike

我有一些装满书籍的 [NSDictionary],我正在检查这些书籍的值以便更好地在 UICollectionView 中显示内容。我正在检查一个 key 是否包含多个 ISBN 编号。如果是这样,我想将它们作为单独的书来展示。键是“isbn”,如果值类似于“["9788252586336"、"9788203360510"]',我想将它们显示为单独的书。因此它们将成为两本“相同”的书,但具有不同的 isbn 编号。

这是发生了什么:

  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 中的编号,就像第一次迭代一样。奇怪的事情现在发生了。当 currentBook 附加到 (tempArray) 时,它应该包含同一本书,但具有不同的 isbn 编号。但它实际上包含具有相同 isbn 编号的相同 fu@%$ 书。不知何故,第二次迭代添加了 2 本具有相同 isbn 编号的书,而应该存在的第一本书不见了......

图1是第一次迭代后,图2是第二次迭代后。如果您查看键“isbn”,您会发现代码有些困惑...

图1 Picture 1

图2 Picture 2

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

最佳答案

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

作为一个简单的修复,您可以在修改字典并将其添加到数组之前copy() 字典。一个更稳健的解决方法是让所有模型都变成值类型。


进一步阅读:

关于ios - 将 NSDictionary 附加到 [NSDictionary] 会产生意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38002242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com